{"version":3,"sources":["../node_modules/long/dist/long.js","../node_modules/bytebuffer/dist/bytebuffer.js","../node_modules/safe-buffer/index.js","../node_modules/base-x/src/index.js","../node_modules/bs58/index.js","../node_modules/assert-plus/assert.js","../node_modules/extsprintf/lib/extsprintf.js","../node_modules/core-util-is/lib/util.js","../node_modules/verror/lib/verror.js","../package.json","../src/utils.ts","../src/crypto.ts","../src/client.ts","../src/version.ts","../src/helpers/blockchain.ts","../src/steem/account.ts","../src/steem/asset.ts","../src/helpers/broadcast.ts","../src/helpers/database.ts","../src/steem/misc.ts","../src/helpers/rc.ts","../src/steem/serializer.ts"],"names":["global","ByteBuffer","assert","copy","lxiv","c","utfx","b","Buffer","i","j","VError","import_bytebuffer","import_verror","BlockchainMode","utilInspect","nobleRipemd160","nobleSha256","nobleSecp","bs58","stream","PassThrough"],"mappings":"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","file":"index.cjs","sourcesContent":["/*\r\n Copyright 2013 Daniel Wirtz <dcode@dcode.io>\r\n Copyright 2009 The Closure Library Authors. All Rights Reserved.\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS-IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license long.js (c) 2013 Daniel Wirtz <dcode@dcode.io>\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/long.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n    /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n        define([], factory);\r\n    /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n        module[\"exports\"] = factory();\r\n    /* Global */ else\r\n        (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"Long\"] = factory();\r\n\r\n})(this, function() {\r\n    \"use strict\";\r\n\r\n    /**\r\n     * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n     *  See the from* functions below for more convenient ways of constructing Longs.\r\n     * @exports Long\r\n     * @class A Long class for representing a 64 bit two's-complement integer value.\r\n     * @param {number} low The low (signed) 32 bits of the long\r\n     * @param {number} high The high (signed) 32 bits of the long\r\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n     * @constructor\r\n     */\r\n    function Long(low, high, unsigned) {\r\n\r\n        /**\r\n         * The low 32 bits as a signed value.\r\n         * @type {number}\r\n         */\r\n        this.low = low | 0;\r\n\r\n        /**\r\n         * The high 32 bits as a signed value.\r\n         * @type {number}\r\n         */\r\n        this.high = high | 0;\r\n\r\n        /**\r\n         * Whether unsigned or not.\r\n         * @type {boolean}\r\n         */\r\n        this.unsigned = !!unsigned;\r\n    }\r\n\r\n    // The internal representation of a long is the two given signed, 32-bit values.\r\n    // We use 32-bit pieces because these are the size of integers on which\r\n    // Javascript performs bit-operations.  For operations like addition and\r\n    // multiplication, we split each number into 16 bit pieces, which can easily be\r\n    // multiplied within Javascript's floating-point representation without overflow\r\n    // or change in sign.\r\n    //\r\n    // In the algorithms below, we frequently reduce the negative case to the\r\n    // positive case by negating the input(s) and then post-processing the result.\r\n    // Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n    // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n    // a positive number, it overflows back into a negative).  Not handling this\r\n    // case would often result in infinite recursion.\r\n    //\r\n    // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n    // methods on which they depend.\r\n\r\n    /**\r\n     * An indicator used to reliably determine if an object is a Long or not.\r\n     * @type {boolean}\r\n     * @const\r\n     * @private\r\n     */\r\n    Long.prototype.__isLong__;\r\n\r\n    Object.defineProperty(Long.prototype, \"__isLong__\", {\r\n        value: true,\r\n        enumerable: false,\r\n        configurable: false\r\n    });\r\n\r\n    /**\r\n     * @function\r\n     * @param {*} obj Object\r\n     * @returns {boolean}\r\n     * @inner\r\n     */\r\n    function isLong(obj) {\r\n        return (obj && obj[\"__isLong__\"]) === true;\r\n    }\r\n\r\n    /**\r\n     * Tests if the specified object is a Long.\r\n     * @function\r\n     * @param {*} obj Object\r\n     * @returns {boolean}\r\n     */\r\n    Long.isLong = isLong;\r\n\r\n    /**\r\n     * A cache of the Long representations of small integer values.\r\n     * @type {!Object}\r\n     * @inner\r\n     */\r\n    var INT_CACHE = {};\r\n\r\n    /**\r\n     * A cache of the Long representations of small unsigned integer values.\r\n     * @type {!Object}\r\n     * @inner\r\n     */\r\n    var UINT_CACHE = {};\r\n\r\n    /**\r\n     * @param {number} value\r\n     * @param {boolean=} unsigned\r\n     * @returns {!Long}\r\n     * @inner\r\n     */\r\n    function fromInt(value, unsigned) {\r\n        var obj, cachedObj, cache;\r\n        if (unsigned) {\r\n            value >>>= 0;\r\n            if (cache = (0 <= value && value < 256)) {\r\n                cachedObj = UINT_CACHE[value];\r\n                if (cachedObj)\r\n                    return cachedObj;\r\n            }\r\n            obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n            if (cache)\r\n                UINT_CACHE[value] = obj;\r\n            return obj;\r\n        } else {\r\n            value |= 0;\r\n            if (cache = (-128 <= value && value < 128)) {\r\n                cachedObj = INT_CACHE[value];\r\n                if (cachedObj)\r\n                    return cachedObj;\r\n            }\r\n            obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n            if (cache)\r\n                INT_CACHE[value] = obj;\r\n            return obj;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Returns a Long representing the given 32 bit integer value.\r\n     * @function\r\n     * @param {number} value The 32 bit integer in question\r\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n     * @returns {!Long} The corresponding Long value\r\n     */\r\n    Long.fromInt = fromInt;\r\n\r\n    /**\r\n     * @param {number} value\r\n     * @param {boolean=} unsigned\r\n     * @returns {!Long}\r\n     * @inner\r\n     */\r\n    function fromNumber(value, unsigned) {\r\n        if (isNaN(value) || !isFinite(value))\r\n            return unsigned ? UZERO : ZERO;\r\n        if (unsigned) {\r\n            if (value < 0)\r\n                return UZERO;\r\n            if (value >= TWO_PWR_64_DBL)\r\n                return MAX_UNSIGNED_VALUE;\r\n        } else {\r\n            if (value <= -TWO_PWR_63_DBL)\r\n                return MIN_VALUE;\r\n            if (value + 1 >= TWO_PWR_63_DBL)\r\n                return MAX_VALUE;\r\n        }\r\n        if (value < 0)\r\n            return fromNumber(-value, unsigned).neg();\r\n        return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n    }\r\n\r\n    /**\r\n     * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n     * @function\r\n     * @param {number} value The number in question\r\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n     * @returns {!Long} The corresponding Long value\r\n     */\r\n    Long.fromNumber = fromNumber;\r\n\r\n    /**\r\n     * @param {number} lowBits\r\n     * @param {number} highBits\r\n     * @param {boolean=} unsigned\r\n     * @returns {!Long}\r\n     * @inner\r\n     */\r\n    function fromBits(lowBits, highBits, unsigned) {\r\n        return new Long(lowBits, highBits, unsigned);\r\n    }\r\n\r\n    /**\r\n     * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n     *  assumed to use 32 bits.\r\n     * @function\r\n     * @param {number} lowBits The low 32 bits\r\n     * @param {number} highBits The high 32 bits\r\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n     * @returns {!Long} The corresponding Long value\r\n     */\r\n    Long.fromBits = fromBits;\r\n\r\n    /**\r\n     * @function\r\n     * @param {number} base\r\n     * @param {number} exponent\r\n     * @returns {number}\r\n     * @inner\r\n     */\r\n    var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n    /**\r\n     * @param {string} str\r\n     * @param {(boolean|number)=} unsigned\r\n     * @param {number=} radix\r\n     * @returns {!Long}\r\n     * @inner\r\n     */\r\n    function fromString(str, unsigned, radix) {\r\n        if (str.length === 0)\r\n            throw Error('empty string');\r\n        if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n            return ZERO;\r\n        if (typeof unsigned === 'number') {\r\n            // For goog.math.long compatibility\r\n            radix = unsigned,\r\n            unsigned = false;\r\n        } else {\r\n            unsigned = !! unsigned;\r\n        }\r\n        radix = radix || 10;\r\n        if (radix < 2 || 36 < radix)\r\n            throw RangeError('radix');\r\n\r\n        var p;\r\n        if ((p = str.indexOf('-')) > 0)\r\n            throw Error('interior hyphen');\r\n        else if (p === 0) {\r\n            return fromString(str.substring(1), unsigned, radix).neg();\r\n        }\r\n\r\n        // Do several (8) digits each time through the loop, so as to\r\n        // minimize the calls to the very expensive emulated div.\r\n        var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n        var result = ZERO;\r\n        for (var i = 0; i < str.length; i += 8) {\r\n            var size = Math.min(8, str.length - i),\r\n                value = parseInt(str.substring(i, i + size), radix);\r\n            if (size < 8) {\r\n                var power = fromNumber(pow_dbl(radix, size));\r\n                result = result.mul(power).add(fromNumber(value));\r\n            } else {\r\n                result = result.mul(radixToPower);\r\n                result = result.add(fromNumber(value));\r\n            }\r\n        }\r\n        result.unsigned = unsigned;\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * Returns a Long representation of the given string, written using the specified radix.\r\n     * @function\r\n     * @param {string} str The textual representation of the Long\r\n     * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n     * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n     * @returns {!Long} The corresponding Long value\r\n     */\r\n    Long.fromString = fromString;\r\n\r\n    /**\r\n     * @function\r\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n     * @returns {!Long}\r\n     * @inner\r\n     */\r\n    function fromValue(val) {\r\n        if (val /* is compatible */ instanceof Long)\r\n            return val;\r\n        if (typeof val === 'number')\r\n            return fromNumber(val);\r\n        if (typeof val === 'string')\r\n            return fromString(val);\r\n        // Throws for non-objects, converts non-instanceof Long:\r\n        return fromBits(val.low, val.high, val.unsigned);\r\n    }\r\n\r\n    /**\r\n     * Converts the specified value to a Long.\r\n     * @function\r\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n     * @returns {!Long}\r\n     */\r\n    Long.fromValue = fromValue;\r\n\r\n    // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n    // no runtime penalty for these.\r\n\r\n    /**\r\n     * @type {number}\r\n     * @const\r\n     * @inner\r\n     */\r\n    var TWO_PWR_16_DBL = 1 << 16;\r\n\r\n    /**\r\n     * @type {number}\r\n     * @const\r\n     * @inner\r\n     */\r\n    var TWO_PWR_24_DBL = 1 << 24;\r\n\r\n    /**\r\n     * @type {number}\r\n     * @const\r\n     * @inner\r\n     */\r\n    var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n    /**\r\n     * @type {number}\r\n     * @const\r\n     * @inner\r\n     */\r\n    var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n    /**\r\n     * @type {number}\r\n     * @const\r\n     * @inner\r\n     */\r\n    var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @const\r\n     * @inner\r\n     */\r\n    var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var ZERO = fromInt(0);\r\n\r\n    /**\r\n     * Signed zero.\r\n     * @type {!Long}\r\n     */\r\n    Long.ZERO = ZERO;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var UZERO = fromInt(0, true);\r\n\r\n    /**\r\n     * Unsigned zero.\r\n     * @type {!Long}\r\n     */\r\n    Long.UZERO = UZERO;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var ONE = fromInt(1);\r\n\r\n    /**\r\n     * Signed one.\r\n     * @type {!Long}\r\n     */\r\n    Long.ONE = ONE;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var UONE = fromInt(1, true);\r\n\r\n    /**\r\n     * Unsigned one.\r\n     * @type {!Long}\r\n     */\r\n    Long.UONE = UONE;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var NEG_ONE = fromInt(-1);\r\n\r\n    /**\r\n     * Signed negative one.\r\n     * @type {!Long}\r\n     */\r\n    Long.NEG_ONE = NEG_ONE;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n    /**\r\n     * Maximum signed value.\r\n     * @type {!Long}\r\n     */\r\n    Long.MAX_VALUE = MAX_VALUE;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n    /**\r\n     * Maximum unsigned value.\r\n     * @type {!Long}\r\n     */\r\n    Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n    /**\r\n     * @type {!Long}\r\n     * @inner\r\n     */\r\n    var MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n    /**\r\n     * Minimum signed value.\r\n     * @type {!Long}\r\n     */\r\n    Long.MIN_VALUE = MIN_VALUE;\r\n\r\n    /**\r\n     * @alias Long.prototype\r\n     * @inner\r\n     */\r\n    var LongPrototype = Long.prototype;\r\n\r\n    /**\r\n     * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n     * @returns {number}\r\n     */\r\n    LongPrototype.toInt = function toInt() {\r\n        return this.unsigned ? this.low >>> 0 : this.low;\r\n    };\r\n\r\n    /**\r\n     * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n     * @returns {number}\r\n     */\r\n    LongPrototype.toNumber = function toNumber() {\r\n        if (this.unsigned)\r\n            return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n        return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n    };\r\n\r\n    /**\r\n     * Converts the Long to a string written in the specified radix.\r\n     * @param {number=} radix Radix (2-36), defaults to 10\r\n     * @returns {string}\r\n     * @override\r\n     * @throws {RangeError} If `radix` is out of range\r\n     */\r\n    LongPrototype.toString = function toString(radix) {\r\n        radix = radix || 10;\r\n        if (radix < 2 || 36 < radix)\r\n            throw RangeError('radix');\r\n        if (this.isZero())\r\n            return '0';\r\n        if (this.isNegative()) { // Unsigned Longs are never negative\r\n            if (this.eq(MIN_VALUE)) {\r\n                // We need to change the Long value before it can be negated, so we remove\r\n                // the bottom-most digit in this base and then recurse to do the rest.\r\n                var radixLong = fromNumber(radix),\r\n                    div = this.div(radixLong),\r\n                    rem1 = div.mul(radixLong).sub(this);\r\n                return div.toString(radix) + rem1.toInt().toString(radix);\r\n            } else\r\n                return '-' + this.neg().toString(radix);\r\n        }\r\n\r\n        // Do several (6) digits each time through the loop, so as to\r\n        // minimize the calls to the very expensive emulated div.\r\n        var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n            rem = this;\r\n        var result = '';\r\n        while (true) {\r\n            var remDiv = rem.div(radixToPower),\r\n                intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n                digits = intval.toString(radix);\r\n            rem = remDiv;\r\n            if (rem.isZero())\r\n                return digits + result;\r\n            else {\r\n                while (digits.length < 6)\r\n                    digits = '0' + digits;\r\n                result = '' + digits + result;\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Gets the high 32 bits as a signed integer.\r\n     * @returns {number} Signed high bits\r\n     */\r\n    LongPrototype.getHighBits = function getHighBits() {\r\n        return this.high;\r\n    };\r\n\r\n    /**\r\n     * Gets the high 32 bits as an unsigned integer.\r\n     * @returns {number} Unsigned high bits\r\n     */\r\n    LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n        return this.high >>> 0;\r\n    };\r\n\r\n    /**\r\n     * Gets the low 32 bits as a signed integer.\r\n     * @returns {number} Signed low bits\r\n     */\r\n    LongPrototype.getLowBits = function getLowBits() {\r\n        return this.low;\r\n    };\r\n\r\n    /**\r\n     * Gets the low 32 bits as an unsigned integer.\r\n     * @returns {number} Unsigned low bits\r\n     */\r\n    LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n        return this.low >>> 0;\r\n    };\r\n\r\n    /**\r\n     * Gets the number of bits needed to represent the absolute value of this Long.\r\n     * @returns {number}\r\n     */\r\n    LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n        if (this.isNegative()) // Unsigned Longs are never negative\r\n            return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n        var val = this.high != 0 ? this.high : this.low;\r\n        for (var bit = 31; bit > 0; bit--)\r\n            if ((val & (1 << bit)) != 0)\r\n                break;\r\n        return this.high != 0 ? bit + 33 : bit + 1;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value equals zero.\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.isZero = function isZero() {\r\n        return this.high === 0 && this.low === 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is negative.\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.isNegative = function isNegative() {\r\n        return !this.unsigned && this.high < 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is positive.\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.isPositive = function isPositive() {\r\n        return this.unsigned || this.high >= 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is odd.\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.isOdd = function isOdd() {\r\n        return (this.low & 1) === 1;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is even.\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.isEven = function isEven() {\r\n        return (this.low & 1) === 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value equals the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.equals = function equals(other) {\r\n        if (!isLong(other))\r\n            other = fromValue(other);\r\n        if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n            return false;\r\n        return this.high === other.high && this.low === other.low;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.eq = LongPrototype.equals;\r\n\r\n    /**\r\n     * Tests if this Long's value differs from the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.notEquals = function notEquals(other) {\r\n        return !this.eq(/* validates */ other);\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.neq = LongPrototype.notEquals;\r\n\r\n    /**\r\n     * Tests if this Long's value is less than the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.lessThan = function lessThan(other) {\r\n        return this.comp(/* validates */ other) < 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.lt = LongPrototype.lessThan;\r\n\r\n    /**\r\n     * Tests if this Long's value is less than or equal the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n        return this.comp(/* validates */ other) <= 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n    /**\r\n     * Tests if this Long's value is greater than the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.greaterThan = function greaterThan(other) {\r\n        return this.comp(/* validates */ other) > 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n    /**\r\n     * Tests if this Long's value is greater than or equal the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n        return this.comp(/* validates */ other) >= 0;\r\n    };\r\n\r\n    /**\r\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {boolean}\r\n     */\r\n    LongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n    /**\r\n     * Compares this Long's value with the specified's.\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n     *  if the given one is greater\r\n     */\r\n    LongPrototype.compare = function compare(other) {\r\n        if (!isLong(other))\r\n            other = fromValue(other);\r\n        if (this.eq(other))\r\n            return 0;\r\n        var thisNeg = this.isNegative(),\r\n            otherNeg = other.isNegative();\r\n        if (thisNeg && !otherNeg)\r\n            return -1;\r\n        if (!thisNeg && otherNeg)\r\n            return 1;\r\n        // At this point the sign bits are the same\r\n        if (!this.unsigned)\r\n            return this.sub(other).isNegative() ? -1 : 1;\r\n        // Both are positive if at least one is unsigned\r\n        return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n    };\r\n\r\n    /**\r\n     * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n     * @function\r\n     * @param {!Long|number|string} other Other value\r\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n     *  if the given one is greater\r\n     */\r\n    LongPrototype.comp = LongPrototype.compare;\r\n\r\n    /**\r\n     * Negates this Long's value.\r\n     * @returns {!Long} Negated Long\r\n     */\r\n    LongPrototype.negate = function negate() {\r\n        if (!this.unsigned && this.eq(MIN_VALUE))\r\n            return MIN_VALUE;\r\n        return this.not().add(ONE);\r\n    };\r\n\r\n    /**\r\n     * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n     * @function\r\n     * @returns {!Long} Negated Long\r\n     */\r\n    LongPrototype.neg = LongPrototype.negate;\r\n\r\n    /**\r\n     * Returns the sum of this and the specified Long.\r\n     * @param {!Long|number|string} addend Addend\r\n     * @returns {!Long} Sum\r\n     */\r\n    LongPrototype.add = function add(addend) {\r\n        if (!isLong(addend))\r\n            addend = fromValue(addend);\r\n\r\n        // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n        var a48 = this.high >>> 16;\r\n        var a32 = this.high & 0xFFFF;\r\n        var a16 = this.low >>> 16;\r\n        var a00 = this.low & 0xFFFF;\r\n\r\n        var b48 = addend.high >>> 16;\r\n        var b32 = addend.high & 0xFFFF;\r\n        var b16 = addend.low >>> 16;\r\n        var b00 = addend.low & 0xFFFF;\r\n\r\n        var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n        c00 += a00 + b00;\r\n        c16 += c00 >>> 16;\r\n        c00 &= 0xFFFF;\r\n        c16 += a16 + b16;\r\n        c32 += c16 >>> 16;\r\n        c16 &= 0xFFFF;\r\n        c32 += a32 + b32;\r\n        c48 += c32 >>> 16;\r\n        c32 &= 0xFFFF;\r\n        c48 += a48 + b48;\r\n        c48 &= 0xFFFF;\r\n        return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns the difference of this and the specified Long.\r\n     * @param {!Long|number|string} subtrahend Subtrahend\r\n     * @returns {!Long} Difference\r\n     */\r\n    LongPrototype.subtract = function subtract(subtrahend) {\r\n        if (!isLong(subtrahend))\r\n            subtrahend = fromValue(subtrahend);\r\n        return this.add(subtrahend.neg());\r\n    };\r\n\r\n    /**\r\n     * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n     * @function\r\n     * @param {!Long|number|string} subtrahend Subtrahend\r\n     * @returns {!Long} Difference\r\n     */\r\n    LongPrototype.sub = LongPrototype.subtract;\r\n\r\n    /**\r\n     * Returns the product of this and the specified Long.\r\n     * @param {!Long|number|string} multiplier Multiplier\r\n     * @returns {!Long} Product\r\n     */\r\n    LongPrototype.multiply = function multiply(multiplier) {\r\n        if (this.isZero())\r\n            return ZERO;\r\n        if (!isLong(multiplier))\r\n            multiplier = fromValue(multiplier);\r\n        if (multiplier.isZero())\r\n            return ZERO;\r\n        if (this.eq(MIN_VALUE))\r\n            return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n        if (multiplier.eq(MIN_VALUE))\r\n            return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n        if (this.isNegative()) {\r\n            if (multiplier.isNegative())\r\n                return this.neg().mul(multiplier.neg());\r\n            else\r\n                return this.neg().mul(multiplier).neg();\r\n        } else if (multiplier.isNegative())\r\n            return this.mul(multiplier.neg()).neg();\r\n\r\n        // If both longs are small, use float multiplication\r\n        if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n            return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n        // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n        // We can skip products that would overflow.\r\n\r\n        var a48 = this.high >>> 16;\r\n        var a32 = this.high & 0xFFFF;\r\n        var a16 = this.low >>> 16;\r\n        var a00 = this.low & 0xFFFF;\r\n\r\n        var b48 = multiplier.high >>> 16;\r\n        var b32 = multiplier.high & 0xFFFF;\r\n        var b16 = multiplier.low >>> 16;\r\n        var b00 = multiplier.low & 0xFFFF;\r\n\r\n        var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n        c00 += a00 * b00;\r\n        c16 += c00 >>> 16;\r\n        c00 &= 0xFFFF;\r\n        c16 += a16 * b00;\r\n        c32 += c16 >>> 16;\r\n        c16 &= 0xFFFF;\r\n        c16 += a00 * b16;\r\n        c32 += c16 >>> 16;\r\n        c16 &= 0xFFFF;\r\n        c32 += a32 * b00;\r\n        c48 += c32 >>> 16;\r\n        c32 &= 0xFFFF;\r\n        c32 += a16 * b16;\r\n        c48 += c32 >>> 16;\r\n        c32 &= 0xFFFF;\r\n        c32 += a00 * b32;\r\n        c48 += c32 >>> 16;\r\n        c32 &= 0xFFFF;\r\n        c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n        c48 &= 0xFFFF;\r\n        return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n     * @function\r\n     * @param {!Long|number|string} multiplier Multiplier\r\n     * @returns {!Long} Product\r\n     */\r\n    LongPrototype.mul = LongPrototype.multiply;\r\n\r\n    /**\r\n     * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n     *  unsigned if this Long is unsigned.\r\n     * @param {!Long|number|string} divisor Divisor\r\n     * @returns {!Long} Quotient\r\n     */\r\n    LongPrototype.divide = function divide(divisor) {\r\n        if (!isLong(divisor))\r\n            divisor = fromValue(divisor);\r\n        if (divisor.isZero())\r\n            throw Error('division by zero');\r\n        if (this.isZero())\r\n            return this.unsigned ? UZERO : ZERO;\r\n        var approx, rem, res;\r\n        if (!this.unsigned) {\r\n            // This section is only relevant for signed longs and is derived from the\r\n            // closure library as a whole.\r\n            if (this.eq(MIN_VALUE)) {\r\n                if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n                    return MIN_VALUE;  // recall that -MIN_VALUE == MIN_VALUE\r\n                else if (divisor.eq(MIN_VALUE))\r\n                    return ONE;\r\n                else {\r\n                    // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n                    var halfThis = this.shr(1);\r\n                    approx = halfThis.div(divisor).shl(1);\r\n                    if (approx.eq(ZERO)) {\r\n                        return divisor.isNegative() ? ONE : NEG_ONE;\r\n                    } else {\r\n                        rem = this.sub(divisor.mul(approx));\r\n                        res = approx.add(rem.div(divisor));\r\n                        return res;\r\n                    }\r\n                }\r\n            } else if (divisor.eq(MIN_VALUE))\r\n                return this.unsigned ? UZERO : ZERO;\r\n            if (this.isNegative()) {\r\n                if (divisor.isNegative())\r\n                    return this.neg().div(divisor.neg());\r\n                return this.neg().div(divisor).neg();\r\n            } else if (divisor.isNegative())\r\n                return this.div(divisor.neg()).neg();\r\n            res = ZERO;\r\n        } else {\r\n            // The algorithm below has not been made for unsigned longs. It's therefore\r\n            // required to take special care of the MSB prior to running it.\r\n            if (!divisor.unsigned)\r\n                divisor = divisor.toUnsigned();\r\n            if (divisor.gt(this))\r\n                return UZERO;\r\n            if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n                return UONE;\r\n            res = UZERO;\r\n        }\r\n\r\n        // Repeat the following until the remainder is less than other:  find a\r\n        // floating-point that approximates remainder / other *from below*, add this\r\n        // into the result, and subtract it from the remainder.  It is critical that\r\n        // the approximate value is less than or equal to the real value so that the\r\n        // remainder never becomes negative.\r\n        rem = this;\r\n        while (rem.gte(divisor)) {\r\n            // Approximate the result of division. This may be a little greater or\r\n            // smaller than the actual value.\r\n            approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n            // We will tweak the approximate result by changing it in the 48-th digit or\r\n            // the smallest non-fractional digit, whichever is larger.\r\n            var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n                delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n            // Decrease the approximation until it is smaller than the remainder.  Note\r\n            // that if it is too large, the product overflows and is negative.\r\n                approxRes = fromNumber(approx),\r\n                approxRem = approxRes.mul(divisor);\r\n            while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n                approx -= delta;\r\n                approxRes = fromNumber(approx, this.unsigned);\r\n                approxRem = approxRes.mul(divisor);\r\n            }\r\n\r\n            // We know the answer can't be zero... and actually, zero would cause\r\n            // infinite recursion since we would make no progress.\r\n            if (approxRes.isZero())\r\n                approxRes = ONE;\r\n\r\n            res = res.add(approxRes);\r\n            rem = rem.sub(approxRem);\r\n        }\r\n        return res;\r\n    };\r\n\r\n    /**\r\n     * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n     * @function\r\n     * @param {!Long|number|string} divisor Divisor\r\n     * @returns {!Long} Quotient\r\n     */\r\n    LongPrototype.div = LongPrototype.divide;\r\n\r\n    /**\r\n     * Returns this Long modulo the specified.\r\n     * @param {!Long|number|string} divisor Divisor\r\n     * @returns {!Long} Remainder\r\n     */\r\n    LongPrototype.modulo = function modulo(divisor) {\r\n        if (!isLong(divisor))\r\n            divisor = fromValue(divisor);\r\n        return this.sub(this.div(divisor).mul(divisor));\r\n    };\r\n\r\n    /**\r\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n     * @function\r\n     * @param {!Long|number|string} divisor Divisor\r\n     * @returns {!Long} Remainder\r\n     */\r\n    LongPrototype.mod = LongPrototype.modulo;\r\n\r\n    /**\r\n     * Returns the bitwise NOT of this Long.\r\n     * @returns {!Long}\r\n     */\r\n    LongPrototype.not = function not() {\r\n        return fromBits(~this.low, ~this.high, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns the bitwise AND of this Long and the specified.\r\n     * @param {!Long|number|string} other Other Long\r\n     * @returns {!Long}\r\n     */\r\n    LongPrototype.and = function and(other) {\r\n        if (!isLong(other))\r\n            other = fromValue(other);\r\n        return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns the bitwise OR of this Long and the specified.\r\n     * @param {!Long|number|string} other Other Long\r\n     * @returns {!Long}\r\n     */\r\n    LongPrototype.or = function or(other) {\r\n        if (!isLong(other))\r\n            other = fromValue(other);\r\n        return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns the bitwise XOR of this Long and the given one.\r\n     * @param {!Long|number|string} other Other Long\r\n     * @returns {!Long}\r\n     */\r\n    LongPrototype.xor = function xor(other) {\r\n        if (!isLong(other))\r\n            other = fromValue(other);\r\n        return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns this Long with bits shifted to the left by the given amount.\r\n     * @param {number|!Long} numBits Number of bits\r\n     * @returns {!Long} Shifted Long\r\n     */\r\n    LongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n        if (isLong(numBits))\r\n            numBits = numBits.toInt();\r\n        if ((numBits &= 63) === 0)\r\n            return this;\r\n        else if (numBits < 32)\r\n            return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n        else\r\n            return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n     * @function\r\n     * @param {number|!Long} numBits Number of bits\r\n     * @returns {!Long} Shifted Long\r\n     */\r\n    LongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n    /**\r\n     * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n     * @param {number|!Long} numBits Number of bits\r\n     * @returns {!Long} Shifted Long\r\n     */\r\n    LongPrototype.shiftRight = function shiftRight(numBits) {\r\n        if (isLong(numBits))\r\n            numBits = numBits.toInt();\r\n        if ((numBits &= 63) === 0)\r\n            return this;\r\n        else if (numBits < 32)\r\n            return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n        else\r\n            return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n    };\r\n\r\n    /**\r\n     * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n     * @function\r\n     * @param {number|!Long} numBits Number of bits\r\n     * @returns {!Long} Shifted Long\r\n     */\r\n    LongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n    /**\r\n     * Returns this Long with bits logically shifted to the right by the given amount.\r\n     * @param {number|!Long} numBits Number of bits\r\n     * @returns {!Long} Shifted Long\r\n     */\r\n    LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n        if (isLong(numBits))\r\n            numBits = numBits.toInt();\r\n        numBits &= 63;\r\n        if (numBits === 0)\r\n            return this;\r\n        else {\r\n            var high = this.high;\r\n            if (numBits < 32) {\r\n                var low = this.low;\r\n                return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n            } else if (numBits === 32)\r\n                return fromBits(high, 0, this.unsigned);\r\n            else\r\n                return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n     * @function\r\n     * @param {number|!Long} numBits Number of bits\r\n     * @returns {!Long} Shifted Long\r\n     */\r\n    LongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n    /**\r\n     * Converts this Long to signed.\r\n     * @returns {!Long} Signed long\r\n     */\r\n    LongPrototype.toSigned = function toSigned() {\r\n        if (!this.unsigned)\r\n            return this;\r\n        return fromBits(this.low, this.high, false);\r\n    };\r\n\r\n    /**\r\n     * Converts this Long to unsigned.\r\n     * @returns {!Long} Unsigned long\r\n     */\r\n    LongPrototype.toUnsigned = function toUnsigned() {\r\n        if (this.unsigned)\r\n            return this;\r\n        return fromBits(this.low, this.high, true);\r\n    };\r\n\r\n    /**\r\n     * Converts this Long to its byte representation.\r\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n     * @returns {!Array.<number>} Byte representation\r\n     */\r\n    LongPrototype.toBytes = function(le) {\r\n        return le ? this.toBytesLE() : this.toBytesBE();\r\n    }\r\n\r\n    /**\r\n     * Converts this Long to its little endian byte representation.\r\n     * @returns {!Array.<number>} Little endian byte representation\r\n     */\r\n    LongPrototype.toBytesLE = function() {\r\n        var hi = this.high,\r\n            lo = this.low;\r\n        return [\r\n             lo         & 0xff,\r\n            (lo >>>  8) & 0xff,\r\n            (lo >>> 16) & 0xff,\r\n            (lo >>> 24) & 0xff,\r\n             hi         & 0xff,\r\n            (hi >>>  8) & 0xff,\r\n            (hi >>> 16) & 0xff,\r\n            (hi >>> 24) & 0xff\r\n        ];\r\n    }\r\n\r\n    /**\r\n     * Converts this Long to its big endian byte representation.\r\n     * @returns {!Array.<number>} Big endian byte representation\r\n     */\r\n    LongPrototype.toBytesBE = function() {\r\n        var hi = this.high,\r\n            lo = this.low;\r\n        return [\r\n            (hi >>> 24) & 0xff,\r\n            (hi >>> 16) & 0xff,\r\n            (hi >>>  8) & 0xff,\r\n             hi         & 0xff,\r\n            (lo >>> 24) & 0xff,\r\n            (lo >>> 16) & 0xff,\r\n            (lo >>>  8) & 0xff,\r\n             lo         & 0xff\r\n        ];\r\n    }\r\n\r\n    return Long;\r\n});\r\n","/*\r\n Copyright 2013-2014 Daniel Wirtz <dcode@dcode.io>\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license bytebuffer.js (c) 2015 Daniel Wirtz <dcode@dcode.io>\r\n * Backing buffer: ArrayBuffer, Accessor: Uint8Array\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/bytebuffer.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n    /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n        define([\"long\"], factory);\r\n    /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n        module['exports'] = (function() {\r\n            var Long; try { Long = require(\"long\"); } catch (e) {}\r\n            return factory(Long);\r\n        })();\r\n    /* Global */ else\r\n        (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"ByteBuffer\"] = factory(global[\"dcodeIO\"][\"Long\"]);\r\n\r\n})(this, function(Long) {\r\n    \"use strict\";\r\n\r\n    /**\r\n     * Constructs a new ByteBuffer.\r\n     * @class The swiss army knife for binary data in JavaScript.\r\n     * @exports ByteBuffer\r\n     * @constructor\r\n     * @param {number=} capacity Initial capacity. Defaults to {@link ByteBuffer.DEFAULT_CAPACITY}.\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @expose\r\n     */\r\n    var ByteBuffer = function(capacity, littleEndian, noAssert) {\r\n        if (typeof capacity === 'undefined')\r\n            capacity = ByteBuffer.DEFAULT_CAPACITY;\r\n        if (typeof littleEndian === 'undefined')\r\n            littleEndian = ByteBuffer.DEFAULT_ENDIAN;\r\n        if (typeof noAssert === 'undefined')\r\n            noAssert = ByteBuffer.DEFAULT_NOASSERT;\r\n        if (!noAssert) {\r\n            capacity = capacity | 0;\r\n            if (capacity < 0)\r\n                throw RangeError(\"Illegal capacity\");\r\n            littleEndian = !!littleEndian;\r\n            noAssert = !!noAssert;\r\n        }\r\n\r\n        /**\r\n         * Backing ArrayBuffer.\r\n         * @type {!ArrayBuffer}\r\n         * @expose\r\n         */\r\n        this.buffer = capacity === 0 ? EMPTY_BUFFER : new ArrayBuffer(capacity);\r\n\r\n        /**\r\n         * Uint8Array utilized to manipulate the backing buffer. Becomes `null` if the backing buffer has a capacity of `0`.\r\n         * @type {?Uint8Array}\r\n         * @expose\r\n         */\r\n        this.view = capacity === 0 ? null : new Uint8Array(this.buffer);\r\n\r\n        /**\r\n         * Absolute read/write offset.\r\n         * @type {number}\r\n         * @expose\r\n         * @see ByteBuffer#flip\r\n         * @see ByteBuffer#clear\r\n         */\r\n        this.offset = 0;\r\n\r\n        /**\r\n         * Marked offset.\r\n         * @type {number}\r\n         * @expose\r\n         * @see ByteBuffer#mark\r\n         * @see ByteBuffer#reset\r\n         */\r\n        this.markedOffset = -1;\r\n\r\n        /**\r\n         * Absolute limit of the contained data. Set to the backing buffer's capacity upon allocation.\r\n         * @type {number}\r\n         * @expose\r\n         * @see ByteBuffer#flip\r\n         * @see ByteBuffer#clear\r\n         */\r\n        this.limit = capacity;\r\n\r\n        /**\r\n         * Whether to use little endian byte order, defaults to `false` for big endian.\r\n         * @type {boolean}\r\n         * @expose\r\n         */\r\n        this.littleEndian = littleEndian;\r\n\r\n        /**\r\n         * Whether to skip assertions of offsets and values, defaults to `false`.\r\n         * @type {boolean}\r\n         * @expose\r\n         */\r\n        this.noAssert = noAssert;\r\n    };\r\n\r\n    /**\r\n     * ByteBuffer version.\r\n     * @type {string}\r\n     * @const\r\n     * @expose\r\n     */\r\n    ByteBuffer.VERSION = \"5.0.1\";\r\n\r\n    /**\r\n     * Little endian constant that can be used instead of its boolean value. Evaluates to `true`.\r\n     * @type {boolean}\r\n     * @const\r\n     * @expose\r\n     */\r\n    ByteBuffer.LITTLE_ENDIAN = true;\r\n\r\n    /**\r\n     * Big endian constant that can be used instead of its boolean value. Evaluates to `false`.\r\n     * @type {boolean}\r\n     * @const\r\n     * @expose\r\n     */\r\n    ByteBuffer.BIG_ENDIAN = false;\r\n\r\n    /**\r\n     * Default initial capacity of `16`.\r\n     * @type {number}\r\n     * @expose\r\n     */\r\n    ByteBuffer.DEFAULT_CAPACITY = 16;\r\n\r\n    /**\r\n     * Default endianess of `false` for big endian.\r\n     * @type {boolean}\r\n     * @expose\r\n     */\r\n    ByteBuffer.DEFAULT_ENDIAN = ByteBuffer.BIG_ENDIAN;\r\n\r\n    /**\r\n     * Default no assertions flag of `false`.\r\n     * @type {boolean}\r\n     * @expose\r\n     */\r\n    ByteBuffer.DEFAULT_NOASSERT = false;\r\n\r\n    /**\r\n     * A `Long` class for representing a 64-bit two's-complement integer value. May be `null` if Long.js has not been loaded\r\n     *  and int64 support is not available.\r\n     * @type {?Long}\r\n     * @const\r\n     * @see https://github.com/dcodeIO/long.js\r\n     * @expose\r\n     */\r\n    ByteBuffer.Long = Long || null;\r\n\r\n    /**\r\n     * @alias ByteBuffer.prototype\r\n     * @inner\r\n     */\r\n    var ByteBufferPrototype = ByteBuffer.prototype;\r\n\r\n    /**\r\n     * An indicator used to reliably determine if an object is a ByteBuffer or not.\r\n     * @type {boolean}\r\n     * @const\r\n     * @expose\r\n     * @private\r\n     */\r\n    ByteBufferPrototype.__isByteBuffer__;\r\n\r\n    Object.defineProperty(ByteBufferPrototype, \"__isByteBuffer__\", {\r\n        value: true,\r\n        enumerable: false,\r\n        configurable: false\r\n    });\r\n\r\n    // helpers\r\n\r\n    /**\r\n     * @type {!ArrayBuffer}\r\n     * @inner\r\n     */\r\n    var EMPTY_BUFFER = new ArrayBuffer(0);\r\n\r\n    /**\r\n     * String.fromCharCode reference for compile-time renaming.\r\n     * @type {function(...number):string}\r\n     * @inner\r\n     */\r\n    var stringFromCharCode = String.fromCharCode;\r\n\r\n    /**\r\n     * Creates a source function for a string.\r\n     * @param {string} s String to read from\r\n     * @returns {function():number|null} Source function returning the next char code respectively `null` if there are\r\n     *  no more characters left.\r\n     * @throws {TypeError} If the argument is invalid\r\n     * @inner\r\n     */\r\n    function stringSource(s) {\r\n        var i=0; return function() {\r\n            return i < s.length ? s.charCodeAt(i++) : null;\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Creates a destination function for a string.\r\n     * @returns {function(number=):undefined|string} Destination function successively called with the next char code.\r\n     *  Returns the final string when called without arguments.\r\n     * @inner\r\n     */\r\n    function stringDestination() {\r\n        var cs = [], ps = []; return function() {\r\n            if (arguments.length === 0)\r\n                return ps.join('')+stringFromCharCode.apply(String, cs);\r\n            if (cs.length + arguments.length > 1024)\r\n                ps.push(stringFromCharCode.apply(String, cs)),\r\n                    cs.length = 0;\r\n            Array.prototype.push.apply(cs, arguments);\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Gets the accessor type.\r\n     * @returns {Function} `Buffer` under node.js, `Uint8Array` respectively `DataView` in the browser (classes)\r\n     * @expose\r\n     */\r\n    ByteBuffer.accessor = function() {\r\n        return Uint8Array;\r\n    };\r\n    /**\r\n     * Allocates a new ByteBuffer backed by a buffer of the specified capacity.\r\n     * @param {number=} capacity Initial capacity. Defaults to {@link ByteBuffer.DEFAULT_CAPACITY}.\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @returns {!ByteBuffer}\r\n     * @expose\r\n     */\r\n    ByteBuffer.allocate = function(capacity, littleEndian, noAssert) {\r\n        return new ByteBuffer(capacity, littleEndian, noAssert);\r\n    };\r\n\r\n    /**\r\n     * Concatenates multiple ByteBuffers into one.\r\n     * @param {!Array.<!ByteBuffer|!ArrayBuffer|!Uint8Array|string>} buffers Buffers to concatenate\r\n     * @param {(string|boolean)=} encoding String encoding if `buffers` contains a string (\"base64\", \"hex\", \"binary\",\r\n     *  defaults to \"utf8\")\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order for the resulting ByteBuffer. Defaults\r\n     *  to {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values for the resulting ByteBuffer. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @returns {!ByteBuffer} Concatenated ByteBuffer\r\n     * @expose\r\n     */\r\n    ByteBuffer.concat = function(buffers, encoding, littleEndian, noAssert) {\r\n        if (typeof encoding === 'boolean' || typeof encoding !== 'string') {\r\n            noAssert = littleEndian;\r\n            littleEndian = encoding;\r\n            encoding = undefined;\r\n        }\r\n        var capacity = 0;\r\n        for (var i=0, k=buffers.length, length; i<k; ++i) {\r\n            if (!ByteBuffer.isByteBuffer(buffers[i]))\r\n                buffers[i] = ByteBuffer.wrap(buffers[i], encoding);\r\n            length = buffers[i].limit - buffers[i].offset;\r\n            if (length > 0) capacity += length;\r\n        }\r\n        if (capacity === 0)\r\n            return new ByteBuffer(0, littleEndian, noAssert);\r\n        var bb = new ByteBuffer(capacity, littleEndian, noAssert),\r\n            bi;\r\n        i=0; while (i<k) {\r\n            bi = buffers[i++];\r\n            length = bi.limit - bi.offset;\r\n            if (length <= 0) continue;\r\n            bb.view.set(bi.view.subarray(bi.offset, bi.limit), bb.offset);\r\n            bb.offset += length;\r\n        }\r\n        bb.limit = bb.offset;\r\n        bb.offset = 0;\r\n        return bb;\r\n    };\r\n\r\n    /**\r\n     * Tests if the specified type is a ByteBuffer.\r\n     * @param {*} bb ByteBuffer to test\r\n     * @returns {boolean} `true` if it is a ByteBuffer, otherwise `false`\r\n     * @expose\r\n     */\r\n    ByteBuffer.isByteBuffer = function(bb) {\r\n        return (bb && bb[\"__isByteBuffer__\"]) === true;\r\n    };\r\n    /**\r\n     * Gets the backing buffer type.\r\n     * @returns {Function} `Buffer` under node.js, `ArrayBuffer` in the browser (classes)\r\n     * @expose\r\n     */\r\n    ByteBuffer.type = function() {\r\n        return ArrayBuffer;\r\n    };\r\n    /**\r\n     * Wraps a buffer or a string. Sets the allocated ByteBuffer's {@link ByteBuffer#offset} to `0` and its\r\n     *  {@link ByteBuffer#limit} to the length of the wrapped data.\r\n     * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string|!Array.<number>} buffer Anything that can be wrapped\r\n     * @param {(string|boolean)=} encoding String encoding if `buffer` is a string (\"base64\", \"hex\", \"binary\", defaults to\r\n     *  \"utf8\")\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @returns {!ByteBuffer} A ByteBuffer wrapping `buffer`\r\n     * @expose\r\n     */\r\n    ByteBuffer.wrap = function(buffer, encoding, littleEndian, noAssert) {\r\n        if (typeof encoding !== 'string') {\r\n            noAssert = littleEndian;\r\n            littleEndian = encoding;\r\n            encoding = undefined;\r\n        }\r\n        if (typeof buffer === 'string') {\r\n            if (typeof encoding === 'undefined')\r\n                encoding = \"utf8\";\r\n            switch (encoding) {\r\n                case \"base64\":\r\n                    return ByteBuffer.fromBase64(buffer, littleEndian);\r\n                case \"hex\":\r\n                    return ByteBuffer.fromHex(buffer, littleEndian);\r\n                case \"binary\":\r\n                    return ByteBuffer.fromBinary(buffer, littleEndian);\r\n                case \"utf8\":\r\n                    return ByteBuffer.fromUTF8(buffer, littleEndian);\r\n                case \"debug\":\r\n                    return ByteBuffer.fromDebug(buffer, littleEndian);\r\n                default:\r\n                    throw Error(\"Unsupported encoding: \"+encoding);\r\n            }\r\n        }\r\n        if (buffer === null || typeof buffer !== 'object')\r\n            throw TypeError(\"Illegal buffer\");\r\n        var bb;\r\n        if (ByteBuffer.isByteBuffer(buffer)) {\r\n            bb = ByteBufferPrototype.clone.call(buffer);\r\n            bb.markedOffset = -1;\r\n            return bb;\r\n        }\r\n        if (buffer instanceof Uint8Array) { // Extract ArrayBuffer from Uint8Array\r\n            bb = new ByteBuffer(0, littleEndian, noAssert);\r\n            if (buffer.length > 0) { // Avoid references to more than one EMPTY_BUFFER\r\n                bb.buffer = buffer.buffer;\r\n                bb.offset = buffer.byteOffset;\r\n                bb.limit = buffer.byteOffset + buffer.byteLength;\r\n                bb.view = new Uint8Array(buffer.buffer);\r\n            }\r\n        } else if (buffer instanceof ArrayBuffer) { // Reuse ArrayBuffer\r\n            bb = new ByteBuffer(0, littleEndian, noAssert);\r\n            if (buffer.byteLength > 0) {\r\n                bb.buffer = buffer;\r\n                bb.offset = 0;\r\n                bb.limit = buffer.byteLength;\r\n                bb.view = buffer.byteLength > 0 ? new Uint8Array(buffer) : null;\r\n            }\r\n        } else if (Object.prototype.toString.call(buffer) === \"[object Array]\") { // Create from octets\r\n            bb = new ByteBuffer(buffer.length, littleEndian, noAssert);\r\n            bb.limit = buffer.length;\r\n            for (var i=0; i<buffer.length; ++i)\r\n                bb.view[i] = buffer[i];\r\n        } else\r\n            throw TypeError(\"Illegal buffer\"); // Otherwise fail\r\n        return bb;\r\n    };\r\n\r\n    /**\r\n     * Writes the array as a bitset.\r\n     * @param {Array<boolean>} value Array of booleans to write\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n     * @returns {!ByteBuffer}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeBitSet = function(value, offset) {\r\n      var relative = typeof offset === 'undefined';\n      if (relative) offset = this.offset;\n      if (!this.noAssert) {\r\n        if (!(value instanceof Array))\r\n          throw TypeError(\"Illegal BitSet: Not an array\");\r\n        if (typeof offset !== 'number' || offset % 1 !== 0)\n            throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n        offset >>>= 0;\n        if (offset < 0 || offset + 0 > this.buffer.byteLength)\n            throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n      }\r\n\r\n      var start = offset,\r\n          bits = value.length,\r\n          bytes = (bits >> 3),\r\n          bit = 0,\r\n          k;\r\n\r\n      offset += this.writeVarint32(bits,offset);\r\n\r\n      while(bytes--) {\r\n        k = (!!value[bit++] & 1) |\r\n            ((!!value[bit++] & 1) << 1) |\r\n            ((!!value[bit++] & 1) << 2) |\r\n            ((!!value[bit++] & 1) << 3) |\r\n            ((!!value[bit++] & 1) << 4) |\r\n            ((!!value[bit++] & 1) << 5) |\r\n            ((!!value[bit++] & 1) << 6) |\r\n            ((!!value[bit++] & 1) << 7);\r\n        this.writeByte(k,offset++);\r\n      }\r\n\r\n      if(bit < bits) {\r\n        var m = 0; k = 0;\r\n        while(bit < bits) k = k | ((!!value[bit++] & 1) << (m++));\r\n        this.writeByte(k,offset++);\r\n      }\r\n\r\n      if (relative) {\r\n        this.offset = offset;\r\n        return this;\r\n      }\r\n      return offset - start;\r\n    }\r\n\r\n    /**\r\n     * Reads a BitSet as an array of booleans.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n     * @returns {Array<boolean>\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readBitSet = function(offset) {\r\n      var relative = typeof offset === 'undefined';\n      if (relative) offset = this.offset;\n\r\n      var ret = this.readVarint32(offset),\r\n          bits = ret.value,\r\n          bytes = (bits >> 3),\r\n          bit = 0,\r\n          value = [],\r\n          k;\r\n\r\n      offset += ret.length;\r\n\r\n      while(bytes--) {\r\n        k = this.readByte(offset++);\r\n        value[bit++] = !!(k & 0x01);\r\n        value[bit++] = !!(k & 0x02);\r\n        value[bit++] = !!(k & 0x04);\r\n        value[bit++] = !!(k & 0x08);\r\n        value[bit++] = !!(k & 0x10);\r\n        value[bit++] = !!(k & 0x20);\r\n        value[bit++] = !!(k & 0x40);\r\n        value[bit++] = !!(k & 0x80);\r\n      }\r\n\r\n      if(bit < bits) {\r\n        var m = 0;\r\n        k = this.readByte(offset++);\r\n        while(bit < bits) value[bit++] = !!((k >> (m++)) & 1);\r\n      }\r\n\r\n      if (relative) {\r\n        this.offset = offset;\r\n      }\r\n      return value;\r\n    }\r\n    /**\r\n     * Reads the specified number of bytes.\r\n     * @param {number} length Number of bytes to read\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n     * @returns {!ByteBuffer}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readBytes = function(length, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + length > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+length+\") <= \"+this.buffer.byteLength);\n        }\r\n        var slice = this.slice(offset, offset + length);\r\n        if (relative) this.offset += length;\n        return slice;\r\n    };\r\n\r\n    /**\r\n     * Writes a payload of bytes. This is an alias of {@link ByteBuffer#append}.\r\n     * @function\r\n     * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string} source Data to write. If `source` is a ByteBuffer, its offsets\r\n     *  will be modified according to the performed read operation.\r\n     * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeBytes = ByteBufferPrototype.append;\r\n\r\n    // types/ints/int8\r\n\r\n    /**\r\n     * Writes an 8bit signed integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeInt8 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value |= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 1;\n        var capacity0 = this.buffer.byteLength;\n        if (offset > capacity0)\n            this.resize((capacity0 *= 2) > offset ? capacity0 : offset);\n        offset -= 1;\n        this.view[offset] = value;\r\n        if (relative) this.offset += 1;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes an 8bit signed integer. This is an alias of {@link ByteBuffer#writeInt8}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeByte = ByteBufferPrototype.writeInt8;\r\n\r\n    /**\r\n     * Reads an 8bit signed integer.\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readInt8 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 1 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = this.view[offset];\r\n        if ((value & 0x80) === 0x80) value = -(0xFF - value + 1); // Cast to signed\r\n        if (relative) this.offset += 1;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads an 8bit signed integer. This is an alias of {@link ByteBuffer#readInt8}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readByte = ByteBufferPrototype.readInt8;\r\n\r\n    /**\r\n     * Writes an 8bit unsigned integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUint8 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value >>>= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 1;\n        var capacity1 = this.buffer.byteLength;\n        if (offset > capacity1)\n            this.resize((capacity1 *= 2) > offset ? capacity1 : offset);\n        offset -= 1;\n        this.view[offset] = value;\r\n        if (relative) this.offset += 1;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes an 8bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint8}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUInt8 = ByteBufferPrototype.writeUint8;\r\n\r\n    /**\r\n     * Reads an 8bit unsigned integer.\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUint8 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 1 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = this.view[offset];\r\n        if (relative) this.offset += 1;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads an 8bit unsigned integer. This is an alias of {@link ByteBuffer#readUint8}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUInt8 = ByteBufferPrototype.readUint8;\r\n\r\n    // types/ints/int16\r\n\r\n    /**\r\n     * Writes a 16bit signed integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @throws {TypeError} If `offset` or `value` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeInt16 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value |= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 2;\n        var capacity2 = this.buffer.byteLength;\n        if (offset > capacity2)\n            this.resize((capacity2 *= 2) > offset ? capacity2 : offset);\n        offset -= 2;\n        if (this.littleEndian) {\r\n            this.view[offset+1] = (value & 0xFF00) >>> 8;\r\n            this.view[offset  ] =  value & 0x00FF;\r\n        } else {\r\n            this.view[offset]   = (value & 0xFF00) >>> 8;\r\n            this.view[offset+1] =  value & 0x00FF;\r\n        }\r\n        if (relative) this.offset += 2;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes a 16bit signed integer. This is an alias of {@link ByteBuffer#writeInt16}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @throws {TypeError} If `offset` or `value` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeShort = ByteBufferPrototype.writeInt16;\r\n\r\n    /**\r\n     * Reads a 16bit signed integer.\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @returns {number} Value read\r\n     * @throws {TypeError} If `offset` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readInt16 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 2 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+2+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = 0;\r\n        if (this.littleEndian) {\r\n            value  = this.view[offset  ];\r\n            value |= this.view[offset+1] << 8;\r\n        } else {\r\n            value  = this.view[offset  ] << 8;\r\n            value |= this.view[offset+1];\r\n        }\r\n        if ((value & 0x8000) === 0x8000) value = -(0xFFFF - value + 1); // Cast to signed\r\n        if (relative) this.offset += 2;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads a 16bit signed integer. This is an alias of {@link ByteBuffer#readInt16}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @returns {number} Value read\r\n     * @throws {TypeError} If `offset` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readShort = ByteBufferPrototype.readInt16;\r\n\r\n    /**\r\n     * Writes a 16bit unsigned integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @throws {TypeError} If `offset` or `value` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUint16 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value >>>= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 2;\n        var capacity3 = this.buffer.byteLength;\n        if (offset > capacity3)\n            this.resize((capacity3 *= 2) > offset ? capacity3 : offset);\n        offset -= 2;\n        if (this.littleEndian) {\r\n            this.view[offset+1] = (value & 0xFF00) >>> 8;\r\n            this.view[offset  ] =  value & 0x00FF;\r\n        } else {\r\n            this.view[offset]   = (value & 0xFF00) >>> 8;\r\n            this.view[offset+1] =  value & 0x00FF;\r\n        }\r\n        if (relative) this.offset += 2;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes a 16bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint16}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @throws {TypeError} If `offset` or `value` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUInt16 = ByteBufferPrototype.writeUint16;\r\n\r\n    /**\r\n     * Reads a 16bit unsigned integer.\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @returns {number} Value read\r\n     * @throws {TypeError} If `offset` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUint16 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 2 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+2+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = 0;\r\n        if (this.littleEndian) {\r\n            value  = this.view[offset  ];\r\n            value |= this.view[offset+1] << 8;\r\n        } else {\r\n            value  = this.view[offset  ] << 8;\r\n            value |= this.view[offset+1];\r\n        }\r\n        if (relative) this.offset += 2;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads a 16bit unsigned integer. This is an alias of {@link ByteBuffer#readUint16}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n     * @returns {number} Value read\r\n     * @throws {TypeError} If `offset` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUInt16 = ByteBufferPrototype.readUint16;\r\n\r\n    // types/ints/int32\r\n\r\n    /**\r\n     * Writes a 32bit signed integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeInt32 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value |= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 4;\n        var capacity4 = this.buffer.byteLength;\n        if (offset > capacity4)\n            this.resize((capacity4 *= 2) > offset ? capacity4 : offset);\n        offset -= 4;\n        if (this.littleEndian) {\n            this.view[offset+3] = (value >>> 24) & 0xFF;\n            this.view[offset+2] = (value >>> 16) & 0xFF;\n            this.view[offset+1] = (value >>>  8) & 0xFF;\n            this.view[offset  ] =  value         & 0xFF;\n        } else {\n            this.view[offset  ] = (value >>> 24) & 0xFF;\n            this.view[offset+1] = (value >>> 16) & 0xFF;\n            this.view[offset+2] = (value >>>  8) & 0xFF;\n            this.view[offset+3] =  value         & 0xFF;\n        }\n        if (relative) this.offset += 4;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes a 32bit signed integer. This is an alias of {@link ByteBuffer#writeInt32}.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeInt = ByteBufferPrototype.writeInt32;\r\n\r\n    /**\r\n     * Reads a 32bit signed integer.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readInt32 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 4 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = 0;\r\n        if (this.littleEndian) {\n            value  = this.view[offset+2] << 16;\n            value |= this.view[offset+1] <<  8;\n            value |= this.view[offset  ];\n            value += this.view[offset+3] << 24 >>> 0;\n        } else {\n            value  = this.view[offset+1] << 16;\n            value |= this.view[offset+2] <<  8;\n            value |= this.view[offset+3];\n            value += this.view[offset  ] << 24 >>> 0;\n        }\n        value |= 0; // Cast to signed\r\n        if (relative) this.offset += 4;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads a 32bit signed integer. This is an alias of {@link ByteBuffer#readInt32}.\r\n     * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readInt = ByteBufferPrototype.readInt32;\r\n\r\n    /**\r\n     * Writes a 32bit unsigned integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUint32 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value >>>= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 4;\n        var capacity5 = this.buffer.byteLength;\n        if (offset > capacity5)\n            this.resize((capacity5 *= 2) > offset ? capacity5 : offset);\n        offset -= 4;\n        if (this.littleEndian) {\n            this.view[offset+3] = (value >>> 24) & 0xFF;\n            this.view[offset+2] = (value >>> 16) & 0xFF;\n            this.view[offset+1] = (value >>>  8) & 0xFF;\n            this.view[offset  ] =  value         & 0xFF;\n        } else {\n            this.view[offset  ] = (value >>> 24) & 0xFF;\n            this.view[offset+1] = (value >>> 16) & 0xFF;\n            this.view[offset+2] = (value >>>  8) & 0xFF;\n            this.view[offset+3] =  value         & 0xFF;\n        }\n        if (relative) this.offset += 4;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes a 32bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint32}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUInt32 = ByteBufferPrototype.writeUint32;\r\n\r\n    /**\r\n     * Reads a 32bit unsigned integer.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUint32 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 4 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = 0;\r\n        if (this.littleEndian) {\n            value  = this.view[offset+2] << 16;\n            value |= this.view[offset+1] <<  8;\n            value |= this.view[offset  ];\n            value += this.view[offset+3] << 24 >>> 0;\n        } else {\n            value  = this.view[offset+1] << 16;\n            value |= this.view[offset+2] <<  8;\n            value |= this.view[offset+3];\n            value += this.view[offset  ] << 24 >>> 0;\n        }\n        if (relative) this.offset += 4;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads a 32bit unsigned integer. This is an alias of {@link ByteBuffer#readUint32}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {number} Value read\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUInt32 = ByteBufferPrototype.readUint32;\r\n\r\n    // types/ints/int64\r\n\r\n    if (Long) {\r\n\r\n        /**\r\n         * Writes a 64bit signed integer.\r\n         * @param {number|!Long} value Value to write\r\n         * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!ByteBuffer} this\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.writeInt64 = function(value, offset) {\r\n            var relative = typeof offset === 'undefined';\n            if (relative) offset = this.offset;\n            if (!this.noAssert) {\r\n                if (typeof value === 'number')\n                    value = Long.fromNumber(value);\n                else if (typeof value === 'string')\n                    value = Long.fromString(value);\n                else if (!(value && value instanceof Long))\n                    throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n            }\r\n            if (typeof value === 'number')\n                value = Long.fromNumber(value);\n            else if (typeof value === 'string')\n                value = Long.fromString(value);\n            offset += 8;\n            var capacity6 = this.buffer.byteLength;\n            if (offset > capacity6)\n                this.resize((capacity6 *= 2) > offset ? capacity6 : offset);\n            offset -= 8;\n            var lo = value.low,\r\n                hi = value.high;\r\n            if (this.littleEndian) {\r\n                this.view[offset+3] = (lo >>> 24) & 0xFF;\n                this.view[offset+2] = (lo >>> 16) & 0xFF;\n                this.view[offset+1] = (lo >>>  8) & 0xFF;\n                this.view[offset  ] =  lo         & 0xFF;\n                offset += 4;\r\n                this.view[offset+3] = (hi >>> 24) & 0xFF;\n                this.view[offset+2] = (hi >>> 16) & 0xFF;\n                this.view[offset+1] = (hi >>>  8) & 0xFF;\n                this.view[offset  ] =  hi         & 0xFF;\n            } else {\r\n                this.view[offset  ] = (hi >>> 24) & 0xFF;\n                this.view[offset+1] = (hi >>> 16) & 0xFF;\n                this.view[offset+2] = (hi >>>  8) & 0xFF;\n                this.view[offset+3] =  hi         & 0xFF;\n                offset += 4;\r\n                this.view[offset  ] = (lo >>> 24) & 0xFF;\n                this.view[offset+1] = (lo >>> 16) & 0xFF;\n                this.view[offset+2] = (lo >>>  8) & 0xFF;\n                this.view[offset+3] =  lo         & 0xFF;\n            }\r\n            if (relative) this.offset += 8;\n            return this;\r\n        };\r\n\r\n        /**\r\n         * Writes a 64bit signed integer. This is an alias of {@link ByteBuffer#writeInt64}.\r\n         * @param {number|!Long} value Value to write\r\n         * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!ByteBuffer} this\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.writeLong = ByteBufferPrototype.writeInt64;\r\n\r\n        /**\r\n         * Reads a 64bit signed integer.\r\n         * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!Long}\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.readInt64 = function(offset) {\r\n            var relative = typeof offset === 'undefined';\n            if (relative) offset = this.offset;\n            if (!this.noAssert) {\r\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + 8 > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n            }\r\n            var lo = 0,\r\n                hi = 0;\r\n            if (this.littleEndian) {\r\n                lo  = this.view[offset+2] << 16;\n                lo |= this.view[offset+1] <<  8;\n                lo |= this.view[offset  ];\n                lo += this.view[offset+3] << 24 >>> 0;\n                offset += 4;\r\n                hi  = this.view[offset+2] << 16;\n                hi |= this.view[offset+1] <<  8;\n                hi |= this.view[offset  ];\n                hi += this.view[offset+3] << 24 >>> 0;\n            } else {\r\n                hi  = this.view[offset+1] << 16;\n                hi |= this.view[offset+2] <<  8;\n                hi |= this.view[offset+3];\n                hi += this.view[offset  ] << 24 >>> 0;\n                offset += 4;\r\n                lo  = this.view[offset+1] << 16;\n                lo |= this.view[offset+2] <<  8;\n                lo |= this.view[offset+3];\n                lo += this.view[offset  ] << 24 >>> 0;\n            }\r\n            var value = new Long(lo, hi, false);\r\n            if (relative) this.offset += 8;\n            return value;\r\n        };\r\n\r\n        /**\r\n         * Reads a 64bit signed integer. This is an alias of {@link ByteBuffer#readInt64}.\r\n         * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!Long}\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.readLong = ByteBufferPrototype.readInt64;\r\n\r\n        /**\r\n         * Writes a 64bit unsigned integer.\r\n         * @param {number|!Long} value Value to write\r\n         * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!ByteBuffer} this\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.writeUint64 = function(value, offset) {\r\n            var relative = typeof offset === 'undefined';\n            if (relative) offset = this.offset;\n            if (!this.noAssert) {\r\n                if (typeof value === 'number')\n                    value = Long.fromNumber(value);\n                else if (typeof value === 'string')\n                    value = Long.fromString(value);\n                else if (!(value && value instanceof Long))\n                    throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n            }\r\n            if (typeof value === 'number')\n                value = Long.fromNumber(value);\n            else if (typeof value === 'string')\n                value = Long.fromString(value);\n            offset += 8;\n            var capacity7 = this.buffer.byteLength;\n            if (offset > capacity7)\n                this.resize((capacity7 *= 2) > offset ? capacity7 : offset);\n            offset -= 8;\n            var lo = value.low,\r\n                hi = value.high;\r\n            if (this.littleEndian) {\r\n                this.view[offset+3] = (lo >>> 24) & 0xFF;\n                this.view[offset+2] = (lo >>> 16) & 0xFF;\n                this.view[offset+1] = (lo >>>  8) & 0xFF;\n                this.view[offset  ] =  lo         & 0xFF;\n                offset += 4;\r\n                this.view[offset+3] = (hi >>> 24) & 0xFF;\n                this.view[offset+2] = (hi >>> 16) & 0xFF;\n                this.view[offset+1] = (hi >>>  8) & 0xFF;\n                this.view[offset  ] =  hi         & 0xFF;\n            } else {\r\n                this.view[offset  ] = (hi >>> 24) & 0xFF;\n                this.view[offset+1] = (hi >>> 16) & 0xFF;\n                this.view[offset+2] = (hi >>>  8) & 0xFF;\n                this.view[offset+3] =  hi         & 0xFF;\n                offset += 4;\r\n                this.view[offset  ] = (lo >>> 24) & 0xFF;\n                this.view[offset+1] = (lo >>> 16) & 0xFF;\n                this.view[offset+2] = (lo >>>  8) & 0xFF;\n                this.view[offset+3] =  lo         & 0xFF;\n            }\r\n            if (relative) this.offset += 8;\n            return this;\r\n        };\r\n\r\n        /**\r\n         * Writes a 64bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint64}.\r\n         * @function\r\n         * @param {number|!Long} value Value to write\r\n         * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!ByteBuffer} this\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.writeUInt64 = ByteBufferPrototype.writeUint64;\r\n\r\n        /**\r\n         * Reads a 64bit unsigned integer.\r\n         * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!Long}\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.readUint64 = function(offset) {\r\n            var relative = typeof offset === 'undefined';\n            if (relative) offset = this.offset;\n            if (!this.noAssert) {\r\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + 8 > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n            }\r\n            var lo = 0,\r\n                hi = 0;\r\n            if (this.littleEndian) {\r\n                lo  = this.view[offset+2] << 16;\n                lo |= this.view[offset+1] <<  8;\n                lo |= this.view[offset  ];\n                lo += this.view[offset+3] << 24 >>> 0;\n                offset += 4;\r\n                hi  = this.view[offset+2] << 16;\n                hi |= this.view[offset+1] <<  8;\n                hi |= this.view[offset  ];\n                hi += this.view[offset+3] << 24 >>> 0;\n            } else {\r\n                hi  = this.view[offset+1] << 16;\n                hi |= this.view[offset+2] <<  8;\n                hi |= this.view[offset+3];\n                hi += this.view[offset  ] << 24 >>> 0;\n                offset += 4;\r\n                lo  = this.view[offset+1] << 16;\n                lo |= this.view[offset+2] <<  8;\n                lo |= this.view[offset+3];\n                lo += this.view[offset  ] << 24 >>> 0;\n            }\r\n            var value = new Long(lo, hi, true);\r\n            if (relative) this.offset += 8;\n            return value;\r\n        };\r\n\r\n        /**\r\n         * Reads a 64bit unsigned integer. This is an alias of {@link ByteBuffer#readUint64}.\r\n         * @function\r\n         * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n         * @returns {!Long}\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.readUInt64 = ByteBufferPrototype.readUint64;\r\n\r\n    } // Long\r\n\r\n\r\n    // types/floats/float32\r\n\r\n    /*\r\n     ieee754 - https://github.com/feross/ieee754\r\n\r\n     The MIT License (MIT)\r\n\r\n     Copyright (c) Feross Aboukhadijeh\r\n\r\n     Permission is hereby granted, free of charge, to any person obtaining a copy\r\n     of this software and associated documentation files (the \"Software\"), to deal\r\n     in the Software without restriction, including without limitation the rights\r\n     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n     copies of the Software, and to permit persons to whom the Software is\r\n     furnished to do so, subject to the following conditions:\r\n\r\n     The above copyright notice and this permission notice shall be included in\r\n     all copies or substantial portions of the Software.\r\n\r\n     THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n     THE SOFTWARE.\r\n    */\r\n\r\n    /**\r\n     * Reads an IEEE754 float from a byte array.\r\n     * @param {!Array} buffer\r\n     * @param {number} offset\r\n     * @param {boolean} isLE\r\n     * @param {number} mLen\r\n     * @param {number} nBytes\r\n     * @returns {number}\r\n     * @inner\r\n     */\r\n    function ieee754_read(buffer, offset, isLE, mLen, nBytes) {\r\n        var e, m,\r\n            eLen = nBytes * 8 - mLen - 1,\r\n            eMax = (1 << eLen) - 1,\r\n            eBias = eMax >> 1,\r\n            nBits = -7,\r\n            i = isLE ? (nBytes - 1) : 0,\r\n            d = isLE ? -1 : 1,\r\n            s = buffer[offset + i];\r\n\r\n        i += d;\r\n\r\n        e = s & ((1 << (-nBits)) - 1);\r\n        s >>= (-nBits);\r\n        nBits += eLen;\r\n        for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\r\n\r\n        m = e & ((1 << (-nBits)) - 1);\r\n        e >>= (-nBits);\r\n        nBits += mLen;\r\n        for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\r\n\r\n        if (e === 0) {\r\n            e = 1 - eBias;\r\n        } else if (e === eMax) {\r\n            return m ? NaN : ((s ? -1 : 1) * Infinity);\r\n        } else {\r\n            m = m + Math.pow(2, mLen);\r\n            e = e - eBias;\r\n        }\r\n        return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\r\n    }\r\n\r\n    /**\r\n     * Writes an IEEE754 float to a byte array.\r\n     * @param {!Array} buffer\r\n     * @param {number} value\r\n     * @param {number} offset\r\n     * @param {boolean} isLE\r\n     * @param {number} mLen\r\n     * @param {number} nBytes\r\n     * @inner\r\n     */\r\n    function ieee754_write(buffer, value, offset, isLE, mLen, nBytes) {\r\n        var e, m, c,\r\n            eLen = nBytes * 8 - mLen - 1,\r\n            eMax = (1 << eLen) - 1,\r\n            eBias = eMax >> 1,\r\n            rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),\r\n            i = isLE ? 0 : (nBytes - 1),\r\n            d = isLE ? 1 : -1,\r\n            s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\r\n\r\n        value = Math.abs(value);\r\n\r\n        if (isNaN(value) || value === Infinity) {\r\n            m = isNaN(value) ? 1 : 0;\r\n            e = eMax;\r\n        } else {\r\n            e = Math.floor(Math.log(value) / Math.LN2);\r\n            if (value * (c = Math.pow(2, -e)) < 1) {\r\n                e--;\r\n                c *= 2;\r\n            }\r\n            if (e + eBias >= 1) {\r\n                value += rt / c;\r\n            } else {\r\n                value += rt * Math.pow(2, 1 - eBias);\r\n            }\r\n            if (value * c >= 2) {\r\n                e++;\r\n                c /= 2;\r\n            }\r\n\r\n            if (e + eBias >= eMax) {\r\n                m = 0;\r\n                e = eMax;\r\n            } else if (e + eBias >= 1) {\r\n                m = (value * c - 1) * Math.pow(2, mLen);\r\n                e = e + eBias;\r\n            } else {\r\n                m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\r\n                e = 0;\r\n            }\r\n        }\r\n\r\n        for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\r\n\r\n        e = (e << mLen) | m;\r\n        eLen += mLen;\r\n        for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\r\n\r\n        buffer[offset + i - d] |= s * 128;\r\n    }\r\n\r\n    /**\r\n     * Writes a 32bit float.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeFloat32 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number')\r\n                throw TypeError(\"Illegal value: \"+value+\" (not a number)\");\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 4;\n        var capacity8 = this.buffer.byteLength;\n        if (offset > capacity8)\n            this.resize((capacity8 *= 2) > offset ? capacity8 : offset);\n        offset -= 4;\n        ieee754_write(this.view, value, offset, this.littleEndian, 23, 4);\r\n        if (relative) this.offset += 4;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes a 32bit float. This is an alias of {@link ByteBuffer#writeFloat32}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeFloat = ByteBufferPrototype.writeFloat32;\r\n\r\n    /**\r\n     * Reads a 32bit float.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {number}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readFloat32 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 4 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = ieee754_read(this.view, offset, this.littleEndian, 23, 4);\r\n        if (relative) this.offset += 4;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads a 32bit float. This is an alias of {@link ByteBuffer#readFloat32}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n     * @returns {number}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readFloat = ByteBufferPrototype.readFloat32;\r\n\r\n    // types/floats/float64\r\n\r\n    /**\r\n     * Writes a 64bit float.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeFloat64 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number')\r\n                throw TypeError(\"Illegal value: \"+value+\" (not a number)\");\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        offset += 8;\n        var capacity9 = this.buffer.byteLength;\n        if (offset > capacity9)\n            this.resize((capacity9 *= 2) > offset ? capacity9 : offset);\n        offset -= 8;\n        ieee754_write(this.view, value, offset, this.littleEndian, 52, 8);\r\n        if (relative) this.offset += 8;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Writes a 64bit float. This is an alias of {@link ByteBuffer#writeFloat64}.\r\n     * @function\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeDouble = ByteBufferPrototype.writeFloat64;\r\n\r\n    /**\r\n     * Reads a 64bit float.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n     * @returns {number}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readFloat64 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 8 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n        }\r\n        var value = ieee754_read(this.view, offset, this.littleEndian, 52, 8);\r\n        if (relative) this.offset += 8;\n        return value;\r\n    };\r\n\r\n    /**\r\n     * Reads a 64bit float. This is an alias of {@link ByteBuffer#readFloat64}.\r\n     * @function\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n     * @returns {number}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readDouble = ByteBufferPrototype.readFloat64;\r\n\r\n\r\n    // types/varints/varint32\r\n\r\n    /**\r\n     * Maximum number of bytes required to store a 32bit base 128 variable-length integer.\r\n     * @type {number}\r\n     * @const\r\n     * @expose\r\n     */\r\n    ByteBuffer.MAX_VARINT32_BYTES = 5;\r\n\r\n    /**\r\n     * Calculates the actual number of bytes required to store a 32bit base 128 variable-length integer.\r\n     * @param {number} value Value to encode\r\n     * @returns {number} Number of bytes required. Capped to {@link ByteBuffer.MAX_VARINT32_BYTES}\r\n     * @expose\r\n     */\r\n    ByteBuffer.calculateVarint32 = function(value) {\r\n        // ref: src/google/protobuf/io/coded_stream.cc\r\n        value = value >>> 0;\r\n             if (value < 1 << 7 ) return 1;\r\n        else if (value < 1 << 14) return 2;\r\n        else if (value < 1 << 21) return 3;\r\n        else if (value < 1 << 28) return 4;\r\n        else                      return 5;\r\n    };\r\n\r\n    /**\r\n     * Zigzag encodes a signed 32bit integer so that it can be effectively used with varint encoding.\r\n     * @param {number} n Signed 32bit integer\r\n     * @returns {number} Unsigned zigzag encoded 32bit integer\r\n     * @expose\r\n     */\r\n    ByteBuffer.zigZagEncode32 = function(n) {\r\n        return (((n |= 0) << 1) ^ (n >> 31)) >>> 0; // ref: src/google/protobuf/wire_format_lite.h\r\n    };\r\n\r\n    /**\r\n     * Decodes a zigzag encoded signed 32bit integer.\r\n     * @param {number} n Unsigned zigzag encoded 32bit integer\r\n     * @returns {number} Signed 32bit integer\r\n     * @expose\r\n     */\r\n    ByteBuffer.zigZagDecode32 = function(n) {\r\n        return ((n >>> 1) ^ -(n & 1)) | 0; // // ref: src/google/protobuf/wire_format_lite.h\r\n    };\r\n\r\n    /**\r\n     * Writes a 32bit base 128 variable-length integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {!ByteBuffer|number} this if `offset` is omitted, else the actual number of bytes written\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeVarint32 = function(value, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value |= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        var size = ByteBuffer.calculateVarint32(value),\r\n            b;\r\n        offset += size;\n        var capacity10 = this.buffer.byteLength;\n        if (offset > capacity10)\n            this.resize((capacity10 *= 2) > offset ? capacity10 : offset);\n        offset -= size;\n        value >>>= 0;\r\n        while (value >= 0x80) {\r\n            b = (value & 0x7f) | 0x80;\r\n            this.view[offset++] = b;\r\n            value >>>= 7;\r\n        }\r\n        this.view[offset++] = value;\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return this;\r\n        }\r\n        return size;\r\n    };\r\n\r\n    /**\r\n     * Writes a zig-zag encoded (signed) 32bit base 128 variable-length integer.\r\n     * @param {number} value Value to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {!ByteBuffer|number} this if `offset` is omitted, else the actual number of bytes written\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeVarint32ZigZag = function(value, offset) {\r\n        return this.writeVarint32(ByteBuffer.zigZagEncode32(value), offset);\r\n    };\r\n\r\n    /**\r\n     * Reads a 32bit base 128 variable-length integer.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {number|!{value: number, length: number}} The value read if offset is omitted, else the value read\r\n     *  and the actual number of bytes read.\r\n     * @throws {Error} If it's not a valid varint. Has a property `truncated = true` if there is not enough data available\r\n     *  to fully decode the varint.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readVarint32 = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 1 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n        }\r\n        var c = 0,\r\n            value = 0 >>> 0,\r\n            b;\r\n        do {\r\n            if (!this.noAssert && offset > this.limit) {\r\n                var err = Error(\"Truncated\");\r\n                err['truncated'] = true;\r\n                throw err;\r\n            }\r\n            b = this.view[offset++];\r\n            if (c < 5)\r\n                value |= (b & 0x7f) << (7*c);\r\n            ++c;\r\n        } while ((b & 0x80) !== 0);\r\n        value |= 0;\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return value;\r\n        }\r\n        return {\r\n            \"value\": value,\r\n            \"length\": c\r\n        };\r\n    };\r\n\r\n    /**\r\n     * Reads a zig-zag encoded (signed) 32bit base 128 variable-length integer.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {number|!{value: number, length: number}} The value read if offset is omitted, else the value read\r\n     *  and the actual number of bytes read.\r\n     * @throws {Error} If it's not a valid varint\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readVarint32ZigZag = function(offset) {\r\n        var val = this.readVarint32(offset);\r\n        if (typeof val === 'object')\r\n            val[\"value\"] = ByteBuffer.zigZagDecode32(val[\"value\"]);\r\n        else\r\n            val = ByteBuffer.zigZagDecode32(val);\r\n        return val;\r\n    };\r\n\r\n    // types/varints/varint64\r\n\r\n    if (Long) {\r\n\r\n        /**\r\n         * Maximum number of bytes required to store a 64bit base 128 variable-length integer.\r\n         * @type {number}\r\n         * @const\r\n         * @expose\r\n         */\r\n        ByteBuffer.MAX_VARINT64_BYTES = 10;\r\n\r\n        /**\r\n         * Calculates the actual number of bytes required to store a 64bit base 128 variable-length integer.\r\n         * @param {number|!Long} value Value to encode\r\n         * @returns {number} Number of bytes required. Capped to {@link ByteBuffer.MAX_VARINT64_BYTES}\r\n         * @expose\r\n         */\r\n        ByteBuffer.calculateVarint64 = function(value) {\r\n            if (typeof value === 'number')\n                value = Long.fromNumber(value);\n            else if (typeof value === 'string')\n                value = Long.fromString(value);\n            // ref: src/google/protobuf/io/coded_stream.cc\r\n            var part0 = value.toInt() >>> 0,\r\n                part1 = value.shiftRightUnsigned(28).toInt() >>> 0,\r\n                part2 = value.shiftRightUnsigned(56).toInt() >>> 0;\r\n            if (part2 == 0) {\r\n                if (part1 == 0) {\r\n                    if (part0 < 1 << 14)\r\n                        return part0 < 1 << 7 ? 1 : 2;\r\n                    else\r\n                        return part0 < 1 << 21 ? 3 : 4;\r\n                } else {\r\n                    if (part1 < 1 << 14)\r\n                        return part1 < 1 << 7 ? 5 : 6;\r\n                    else\r\n                        return part1 < 1 << 21 ? 7 : 8;\r\n                }\r\n            } else\r\n                return part2 < 1 << 7 ? 9 : 10;\r\n        };\r\n\r\n        /**\r\n         * Zigzag encodes a signed 64bit integer so that it can be effectively used with varint encoding.\r\n         * @param {number|!Long} value Signed long\r\n         * @returns {!Long} Unsigned zigzag encoded long\r\n         * @expose\r\n         */\r\n        ByteBuffer.zigZagEncode64 = function(value) {\r\n            if (typeof value === 'number')\n                value = Long.fromNumber(value, false);\n            else if (typeof value === 'string')\n                value = Long.fromString(value, false);\n            else if (value.unsigned !== false) value = value.toSigned();\n            // ref: src/google/protobuf/wire_format_lite.h\r\n            return value.shiftLeft(1).xor(value.shiftRight(63)).toUnsigned();\r\n        };\r\n\r\n        /**\r\n         * Decodes a zigzag encoded signed 64bit integer.\r\n         * @param {!Long|number} value Unsigned zigzag encoded long or JavaScript number\r\n         * @returns {!Long} Signed long\r\n         * @expose\r\n         */\r\n        ByteBuffer.zigZagDecode64 = function(value) {\r\n            if (typeof value === 'number')\n                value = Long.fromNumber(value, false);\n            else if (typeof value === 'string')\n                value = Long.fromString(value, false);\n            else if (value.unsigned !== false) value = value.toSigned();\n            // ref: src/google/protobuf/wire_format_lite.h\r\n            return value.shiftRightUnsigned(1).xor(value.and(Long.ONE).toSigned().negate()).toSigned();\r\n        };\r\n\r\n        /**\r\n         * Writes a 64bit base 128 variable-length integer.\r\n         * @param {number|Long} value Value to write\r\n         * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n         *  written if omitted.\r\n         * @returns {!ByteBuffer|number} `this` if offset is omitted, else the actual number of bytes written.\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.writeVarint64 = function(value, offset) {\r\n            var relative = typeof offset === 'undefined';\n            if (relative) offset = this.offset;\n            if (!this.noAssert) {\r\n                if (typeof value === 'number')\n                    value = Long.fromNumber(value);\n                else if (typeof value === 'string')\n                    value = Long.fromString(value);\n                else if (!(value && value instanceof Long))\n                    throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n            }\r\n            if (typeof value === 'number')\n                value = Long.fromNumber(value, false);\n            else if (typeof value === 'string')\n                value = Long.fromString(value, false);\n            else if (value.unsigned !== false) value = value.toSigned();\n            var size = ByteBuffer.calculateVarint64(value),\r\n                part0 = value.toInt() >>> 0,\r\n                part1 = value.shiftRightUnsigned(28).toInt() >>> 0,\r\n                part2 = value.shiftRightUnsigned(56).toInt() >>> 0;\r\n            offset += size;\n            var capacity11 = this.buffer.byteLength;\n            if (offset > capacity11)\n                this.resize((capacity11 *= 2) > offset ? capacity11 : offset);\n            offset -= size;\n            switch (size) {\r\n                case 10: this.view[offset+9] = (part2 >>>  7) & 0x01;\r\n                case 9 : this.view[offset+8] = size !== 9 ? (part2       ) | 0x80 : (part2       ) & 0x7F;\r\n                case 8 : this.view[offset+7] = size !== 8 ? (part1 >>> 21) | 0x80 : (part1 >>> 21) & 0x7F;\r\n                case 7 : this.view[offset+6] = size !== 7 ? (part1 >>> 14) | 0x80 : (part1 >>> 14) & 0x7F;\r\n                case 6 : this.view[offset+5] = size !== 6 ? (part1 >>>  7) | 0x80 : (part1 >>>  7) & 0x7F;\r\n                case 5 : this.view[offset+4] = size !== 5 ? (part1       ) | 0x80 : (part1       ) & 0x7F;\r\n                case 4 : this.view[offset+3] = size !== 4 ? (part0 >>> 21) | 0x80 : (part0 >>> 21) & 0x7F;\r\n                case 3 : this.view[offset+2] = size !== 3 ? (part0 >>> 14) | 0x80 : (part0 >>> 14) & 0x7F;\r\n                case 2 : this.view[offset+1] = size !== 2 ? (part0 >>>  7) | 0x80 : (part0 >>>  7) & 0x7F;\r\n                case 1 : this.view[offset  ] = size !== 1 ? (part0       ) | 0x80 : (part0       ) & 0x7F;\r\n            }\r\n            if (relative) {\r\n                this.offset += size;\r\n                return this;\r\n            } else {\r\n                return size;\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Writes a zig-zag encoded 64bit base 128 variable-length integer.\r\n         * @param {number|Long} value Value to write\r\n         * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n         *  written if omitted.\r\n         * @returns {!ByteBuffer|number} `this` if offset is omitted, else the actual number of bytes written.\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.writeVarint64ZigZag = function(value, offset) {\r\n            return this.writeVarint64(ByteBuffer.zigZagEncode64(value), offset);\r\n        };\r\n\r\n        /**\r\n         * Reads a 64bit base 128 variable-length integer. Requires Long.js.\r\n         * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n         *  read if omitted.\r\n         * @returns {!Long|!{value: Long, length: number}} The value read if offset is omitted, else the value read and\r\n         *  the actual number of bytes read.\r\n         * @throws {Error} If it's not a valid varint\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.readVarint64 = function(offset) {\r\n            var relative = typeof offset === 'undefined';\n            if (relative) offset = this.offset;\n            if (!this.noAssert) {\r\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + 1 > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n            }\r\n            // ref: src/google/protobuf/io/coded_stream.cc\r\n            var start = offset,\r\n                part0 = 0,\r\n                part1 = 0,\r\n                part2 = 0,\r\n                b  = 0;\r\n            b = this.view[offset++]; part0  = (b & 0x7F)      ; if ( b & 0x80                                                   ) {\r\n            b = this.view[offset++]; part0 |= (b & 0x7F) <<  7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part0 |= (b & 0x7F) << 14; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part0 |= (b & 0x7F) << 21; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part1  = (b & 0x7F)      ; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part1 |= (b & 0x7F) <<  7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part1 |= (b & 0x7F) << 14; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part1 |= (b & 0x7F) << 21; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part2  = (b & 0x7F)      ; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            b = this.view[offset++]; part2 |= (b & 0x7F) <<  7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n            throw Error(\"Buffer overrun\"); }}}}}}}}}}\r\n            var value = Long.fromBits(part0 | (part1 << 28), (part1 >>> 4) | (part2) << 24, false);\r\n            if (relative) {\r\n                this.offset = offset;\r\n                return value;\r\n            } else {\r\n                return {\r\n                    'value': value,\r\n                    'length': offset-start\r\n                };\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Reads a zig-zag encoded 64bit base 128 variable-length integer. Requires Long.js.\r\n         * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n         *  read if omitted.\r\n         * @returns {!Long|!{value: Long, length: number}} The value read if offset is omitted, else the value read and\r\n         *  the actual number of bytes read.\r\n         * @throws {Error} If it's not a valid varint\r\n         * @expose\r\n         */\r\n        ByteBufferPrototype.readVarint64ZigZag = function(offset) {\r\n            var val = this.readVarint64(offset);\r\n            if (val && val['value'] instanceof Long)\r\n                val[\"value\"] = ByteBuffer.zigZagDecode64(val[\"value\"]);\r\n            else\r\n                val = ByteBuffer.zigZagDecode64(val);\r\n            return val;\r\n        };\r\n\r\n    } // Long\r\n\r\n\r\n    // types/strings/cstring\r\n\r\n    /**\r\n     * Writes a NULL-terminated UTF8 encoded string. For this to work the specified string must not contain any NULL\r\n     *  characters itself.\r\n     * @param {string} str String to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  contained in `str` + 1 if omitted.\r\n     * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeCString = function(str, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        var i,\r\n            k = str.length;\r\n        if (!this.noAssert) {\r\n            if (typeof str !== 'string')\r\n                throw TypeError(\"Illegal str: Not a string\");\r\n            for (i=0; i<k; ++i) {\r\n                if (str.charCodeAt(i) === 0)\r\n                    throw RangeError(\"Illegal str: Contains NULL-characters\");\r\n            }\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        // UTF8 strings do not contain zero bytes in between except for the zero character, so:\r\n        k = utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n        offset += k+1;\n        var capacity12 = this.buffer.byteLength;\n        if (offset > capacity12)\n            this.resize((capacity12 *= 2) > offset ? capacity12 : offset);\n        offset -= k+1;\n        utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n            this.view[offset++] = b;\r\n        }.bind(this));\r\n        this.view[offset++] = 0;\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return this;\r\n        }\r\n        return k;\r\n    };\r\n\r\n    /**\r\n     * Reads a NULL-terminated UTF8 encoded string. For this to work the string read must not contain any NULL characters\r\n     *  itself.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  read if omitted.\r\n     * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n     *  read and the actual number of bytes read.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readCString = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 1 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n        }\r\n        var start = offset,\r\n            temp;\r\n        // UTF8 strings do not contain zero bytes in between except for the zero character itself, so:\r\n        var sd, b = -1;\r\n        utfx.decodeUTF8toUTF16(function() {\r\n            if (b === 0) return null;\r\n            if (offset >= this.limit)\r\n                throw RangeError(\"Illegal range: Truncated data, \"+offset+\" < \"+this.limit);\r\n            b = this.view[offset++];\r\n            return b === 0 ? null : b;\r\n        }.bind(this), sd = stringDestination(), true);\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return sd();\r\n        } else {\r\n            return {\r\n                \"string\": sd(),\r\n                \"length\": offset - start\r\n            };\r\n        }\r\n    };\r\n\r\n    // types/strings/istring\r\n\r\n    /**\r\n     * Writes a length as uint32 prefixed UTF8 encoded string.\r\n     * @param {string} str String to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {!ByteBuffer|number} `this` if `offset` is omitted, else the actual number of bytes written\r\n     * @expose\r\n     * @see ByteBuffer#writeVarint32\r\n     */\r\n    ByteBufferPrototype.writeIString = function(str, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof str !== 'string')\r\n                throw TypeError(\"Illegal str: Not a string\");\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        var start = offset,\r\n            k;\r\n        k = utfx.calculateUTF16asUTF8(stringSource(str), this.noAssert)[1];\r\n        offset += 4+k;\n        var capacity13 = this.buffer.byteLength;\n        if (offset > capacity13)\n            this.resize((capacity13 *= 2) > offset ? capacity13 : offset);\n        offset -= 4+k;\n        if (this.littleEndian) {\n            this.view[offset+3] = (k >>> 24) & 0xFF;\n            this.view[offset+2] = (k >>> 16) & 0xFF;\n            this.view[offset+1] = (k >>>  8) & 0xFF;\n            this.view[offset  ] =  k         & 0xFF;\n        } else {\n            this.view[offset  ] = (k >>> 24) & 0xFF;\n            this.view[offset+1] = (k >>> 16) & 0xFF;\n            this.view[offset+2] = (k >>>  8) & 0xFF;\n            this.view[offset+3] =  k         & 0xFF;\n        }\n        offset += 4;\r\n        utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n            this.view[offset++] = b;\r\n        }.bind(this));\r\n        if (offset !== start + 4 + k)\r\n            throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+(offset+4+k));\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return this;\r\n        }\r\n        return offset - start;\r\n    };\r\n\r\n    /**\r\n     * Reads a length as uint32 prefixed UTF8 encoded string.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  read if omitted.\r\n     * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n     *  read and the actual number of bytes read.\r\n     * @expose\r\n     * @see ByteBuffer#readVarint32\r\n     */\r\n    ByteBufferPrototype.readIString = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 4 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n        }\r\n        var start = offset;\r\n        var len = this.readUint32(offset);\r\n        var str = this.readUTF8String(len, ByteBuffer.METRICS_BYTES, offset += 4);\r\n        offset += str['length'];\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return str['string'];\r\n        } else {\r\n            return {\r\n                'string': str['string'],\r\n                'length': offset - start\r\n            };\r\n        }\r\n    };\r\n\r\n    // types/strings/utf8string\r\n\r\n    /**\r\n     * Metrics representing number of UTF8 characters. Evaluates to `c`.\r\n     * @type {string}\r\n     * @const\r\n     * @expose\r\n     */\r\n    ByteBuffer.METRICS_CHARS = 'c';\r\n\r\n    /**\r\n     * Metrics representing number of bytes. Evaluates to `b`.\r\n     * @type {string}\r\n     * @const\r\n     * @expose\r\n     */\r\n    ByteBuffer.METRICS_BYTES = 'b';\r\n\r\n    /**\r\n     * Writes an UTF8 encoded string.\r\n     * @param {string} str String to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} if omitted.\r\n     * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeUTF8String = function(str, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        var k;\r\n        var start = offset;\r\n        k = utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n        offset += k;\n        var capacity14 = this.buffer.byteLength;\n        if (offset > capacity14)\n            this.resize((capacity14 *= 2) > offset ? capacity14 : offset);\n        offset -= k;\n        utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n            this.view[offset++] = b;\r\n        }.bind(this));\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return this;\r\n        }\r\n        return offset - start;\r\n    };\r\n\r\n    /**\r\n     * Writes an UTF8 encoded string. This is an alias of {@link ByteBuffer#writeUTF8String}.\r\n     * @function\r\n     * @param {string} str String to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} if omitted.\r\n     * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.writeString = ByteBufferPrototype.writeUTF8String;\r\n\r\n    /**\r\n     * Calculates the number of UTF8 characters of a string. JavaScript itself uses UTF-16, so that a string's\r\n     *  `length` property does not reflect its actual UTF8 size if it contains code points larger than 0xFFFF.\r\n     * @param {string} str String to calculate\r\n     * @returns {number} Number of UTF8 characters\r\n     * @expose\r\n     */\r\n    ByteBuffer.calculateUTF8Chars = function(str) {\r\n        return utfx.calculateUTF16asUTF8(stringSource(str))[0];\r\n    };\r\n\r\n    /**\r\n     * Calculates the number of UTF8 bytes of a string.\r\n     * @param {string} str String to calculate\r\n     * @returns {number} Number of UTF8 bytes\r\n     * @expose\r\n     */\r\n    ByteBuffer.calculateUTF8Bytes = function(str) {\r\n        return utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n    };\r\n\r\n    /**\r\n     * Calculates the number of UTF8 bytes of a string. This is an alias of {@link ByteBuffer.calculateUTF8Bytes}.\r\n     * @function\r\n     * @param {string} str String to calculate\r\n     * @returns {number} Number of UTF8 bytes\r\n     * @expose\r\n     */\r\n    ByteBuffer.calculateString = ByteBuffer.calculateUTF8Bytes;\r\n\r\n    /**\r\n     * Reads an UTF8 encoded string.\r\n     * @param {number} length Number of characters or bytes to read.\r\n     * @param {string=} metrics Metrics specifying what `length` is meant to count. Defaults to\r\n     *  {@link ByteBuffer.METRICS_CHARS}.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  read if omitted.\r\n     * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n     *  read and the actual number of bytes read.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readUTF8String = function(length, metrics, offset) {\r\n        if (typeof metrics === 'number') {\r\n            offset = metrics;\r\n            metrics = undefined;\r\n        }\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (typeof metrics === 'undefined') metrics = ByteBuffer.METRICS_CHARS;\r\n        if (!this.noAssert) {\r\n            if (typeof length !== 'number' || length % 1 !== 0)\n                throw TypeError(\"Illegal length: \"+length+\" (not an integer)\");\n            length |= 0;\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        var i = 0,\r\n            start = offset,\r\n            sd;\r\n        if (metrics === ByteBuffer.METRICS_CHARS) { // The same for node and the browser\r\n            sd = stringDestination();\r\n            utfx.decodeUTF8(function() {\r\n                return i < length && offset < this.limit ? this.view[offset++] : null;\r\n            }.bind(this), function(cp) {\r\n                ++i; utfx.UTF8toUTF16(cp, sd);\r\n            });\r\n            if (i !== length)\r\n                throw RangeError(\"Illegal range: Truncated data, \"+i+\" == \"+length);\r\n            if (relative) {\r\n                this.offset = offset;\r\n                return sd();\r\n            } else {\r\n                return {\r\n                    \"string\": sd(),\r\n                    \"length\": offset - start\r\n                };\r\n            }\r\n        } else if (metrics === ByteBuffer.METRICS_BYTES) {\r\n            if (!this.noAssert) {\r\n                if (typeof offset !== 'number' || offset % 1 !== 0)\n                    throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n                offset >>>= 0;\n                if (offset < 0 || offset + length > this.buffer.byteLength)\n                    throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+length+\") <= \"+this.buffer.byteLength);\n            }\r\n            var k = offset + length;\r\n            utfx.decodeUTF8toUTF16(function() {\r\n                return offset < k ? this.view[offset++] : null;\r\n            }.bind(this), sd = stringDestination(), this.noAssert);\r\n            if (offset !== k)\r\n                throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+k);\r\n            if (relative) {\r\n                this.offset = offset;\r\n                return sd();\r\n            } else {\r\n                return {\r\n                    'string': sd(),\r\n                    'length': offset - start\r\n                };\r\n            }\r\n        } else\r\n            throw TypeError(\"Unsupported metrics: \"+metrics);\r\n    };\r\n\r\n    /**\r\n     * Reads an UTF8 encoded string. This is an alias of {@link ByteBuffer#readUTF8String}.\r\n     * @function\r\n     * @param {number} length Number of characters or bytes to read\r\n     * @param {number=} metrics Metrics specifying what `n` is meant to count. Defaults to\r\n     *  {@link ByteBuffer.METRICS_CHARS}.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  read if omitted.\r\n     * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n     *  read and the actual number of bytes read.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.readString = ByteBufferPrototype.readUTF8String;\r\n\r\n    // types/strings/vstring\r\n\r\n    /**\r\n     * Writes a length as varint32 prefixed UTF8 encoded string.\r\n     * @param {string} str String to write\r\n     * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {!ByteBuffer|number} `this` if `offset` is omitted, else the actual number of bytes written\r\n     * @expose\r\n     * @see ByteBuffer#writeVarint32\r\n     */\r\n    ByteBufferPrototype.writeVString = function(str, offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof str !== 'string')\r\n                throw TypeError(\"Illegal str: Not a string\");\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        var start = offset,\r\n            k, l;\r\n        k = utfx.calculateUTF16asUTF8(stringSource(str), this.noAssert)[1];\r\n        l = ByteBuffer.calculateVarint32(k);\r\n        offset += l+k;\n        var capacity15 = this.buffer.byteLength;\n        if (offset > capacity15)\n            this.resize((capacity15 *= 2) > offset ? capacity15 : offset);\n        offset -= l+k;\n        offset += this.writeVarint32(k, offset);\r\n        utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n            this.view[offset++] = b;\r\n        }.bind(this));\r\n        if (offset !== start+k+l)\r\n            throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+(offset+k+l));\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return this;\r\n        }\r\n        return offset - start;\r\n    };\r\n\r\n    /**\r\n     * Reads a length as varint32 prefixed UTF8 encoded string.\r\n     * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  read if omitted.\r\n     * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n     *  read and the actual number of bytes read.\r\n     * @expose\r\n     * @see ByteBuffer#readVarint32\r\n     */\r\n    ByteBufferPrototype.readVString = function(offset) {\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 1 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n        }\r\n        var start = offset;\r\n        var len = this.readVarint32(offset);\r\n        var str = this.readUTF8String(len['value'], ByteBuffer.METRICS_BYTES, offset += len['length']);\r\n        offset += str['length'];\r\n        if (relative) {\r\n            this.offset = offset;\r\n            return str['string'];\r\n        } else {\r\n            return {\r\n                'string': str['string'],\r\n                'length': offset - start\r\n            };\r\n        }\r\n    };\r\n\r\n\r\n    /**\r\n     * Appends some data to this ByteBuffer. This will overwrite any contents behind the specified offset up to the appended\r\n     *  data's length.\r\n     * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string} source Data to append. If `source` is a ByteBuffer, its offsets\r\n     *  will be modified according to the performed read operation.\r\n     * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n     * @param {number=} offset Offset to append at. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     * @example A relative `<01 02>03.append(<04 05>)` will result in `<01 02 04 05>, 04 05|`\r\n     * @example An absolute `<01 02>03.append(04 05>, 1)` will result in `<01 04>05, 04 05|`\r\n     */\r\n    ByteBufferPrototype.append = function(source, encoding, offset) {\r\n        if (typeof encoding === 'number' || typeof encoding !== 'string') {\r\n            offset = encoding;\r\n            encoding = undefined;\r\n        }\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        if (!(source instanceof ByteBuffer))\r\n            source = ByteBuffer.wrap(source, encoding);\r\n        var length = source.limit - source.offset;\r\n        if (length <= 0) return this; // Nothing to append\r\n        offset += length;\n        var capacity16 = this.buffer.byteLength;\n        if (offset > capacity16)\n            this.resize((capacity16 *= 2) > offset ? capacity16 : offset);\n        offset -= length;\n        this.view.set(source.view.subarray(source.offset, source.limit), offset);\r\n        source.offset += length;\r\n        if (relative) this.offset += length;\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Appends this ByteBuffer's contents to another ByteBuffer. This will overwrite any contents at and after the\r\n        specified offset up to the length of this ByteBuffer's data.\r\n     * @param {!ByteBuffer} target Target ByteBuffer\r\n     * @param {number=} offset Offset to append to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  read if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     * @see ByteBuffer#append\r\n     */\r\n    ByteBufferPrototype.appendTo = function(target, offset) {\r\n        target.append(this, offset);\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Enables or disables assertions of argument types and offsets. Assertions are enabled by default but you can opt to\r\n     *  disable them if your code already makes sure that everything is valid.\r\n     * @param {boolean} assert `true` to enable assertions, otherwise `false`\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.assert = function(assert) {\r\n        this.noAssert = !assert;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Gets the capacity of this ByteBuffer's backing buffer.\r\n     * @returns {number} Capacity of the backing buffer\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.capacity = function() {\r\n        return this.buffer.byteLength;\r\n    };\r\n    /**\r\n     * Clears this ByteBuffer's offsets by setting {@link ByteBuffer#offset} to `0` and {@link ByteBuffer#limit} to the\r\n     *  backing buffer's capacity. Discards {@link ByteBuffer#markedOffset}.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.clear = function() {\r\n        this.offset = 0;\r\n        this.limit = this.buffer.byteLength;\r\n        this.markedOffset = -1;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Creates a cloned instance of this ByteBuffer, preset with this ByteBuffer's values for {@link ByteBuffer#offset},\r\n     *  {@link ByteBuffer#markedOffset} and {@link ByteBuffer#limit}.\r\n     * @param {boolean=} copy Whether to copy the backing buffer or to return another view on the same, defaults to `false`\r\n     * @returns {!ByteBuffer} Cloned instance\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.clone = function(copy) {\r\n        var bb = new ByteBuffer(0, this.littleEndian, this.noAssert);\r\n        if (copy) {\r\n            bb.buffer = new ArrayBuffer(this.buffer.byteLength);\r\n            bb.view = new Uint8Array(bb.buffer);\r\n        } else {\r\n            bb.buffer = this.buffer;\r\n            bb.view = this.view;\r\n        }\r\n        bb.offset = this.offset;\r\n        bb.markedOffset = this.markedOffset;\r\n        bb.limit = this.limit;\r\n        return bb;\r\n    };\r\n\r\n    /**\r\n     * Compacts this ByteBuffer to be backed by a {@link ByteBuffer#buffer} of its contents' length. Contents are the bytes\r\n     *  between {@link ByteBuffer#offset} and {@link ByteBuffer#limit}. Will set `offset = 0` and `limit = capacity` and\r\n     *  adapt {@link ByteBuffer#markedOffset} to the same relative position if set.\r\n     * @param {number=} begin Offset to start at, defaults to {@link ByteBuffer#offset}\r\n     * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.compact = function(begin, end) {\r\n        if (typeof begin === 'undefined') begin = this.offset;\r\n        if (typeof end === 'undefined') end = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        if (begin === 0 && end === this.buffer.byteLength)\r\n            return this; // Already compacted\r\n        var len = end - begin;\r\n        if (len === 0) {\r\n            this.buffer = EMPTY_BUFFER;\r\n            this.view = null;\r\n            if (this.markedOffset >= 0) this.markedOffset -= begin;\r\n            this.offset = 0;\r\n            this.limit = 0;\r\n            return this;\r\n        }\r\n        var buffer = new ArrayBuffer(len);\r\n        var view = new Uint8Array(buffer);\r\n        view.set(this.view.subarray(begin, end));\r\n        this.buffer = buffer;\r\n        this.view = view;\r\n        if (this.markedOffset >= 0) this.markedOffset -= begin;\r\n        this.offset = 0;\r\n        this.limit = len;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Creates a copy of this ByteBuffer's contents. Contents are the bytes between {@link ByteBuffer#offset} and\r\n     *  {@link ByteBuffer#limit}.\r\n     * @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.\r\n     * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n     * @returns {!ByteBuffer} Copy\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.copy = function(begin, end) {\r\n        if (typeof begin === 'undefined') begin = this.offset;\r\n        if (typeof end === 'undefined') end = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        if (begin === end)\r\n            return new ByteBuffer(0, this.littleEndian, this.noAssert);\r\n        var capacity = end - begin,\r\n            bb = new ByteBuffer(capacity, this.littleEndian, this.noAssert);\r\n        bb.offset = 0;\r\n        bb.limit = capacity;\r\n        if (bb.markedOffset >= 0) bb.markedOffset -= begin;\r\n        this.copyTo(bb, 0, begin, end);\r\n        return bb;\r\n    };\r\n\r\n    /**\r\n     * Copies this ByteBuffer's contents to another ByteBuffer. Contents are the bytes between {@link ByteBuffer#offset} and\r\n     *  {@link ByteBuffer#limit}.\r\n     * @param {!ByteBuffer} target Target ByteBuffer\r\n     * @param {number=} targetOffset Offset to copy to. Will use and increase the target's {@link ByteBuffer#offset}\r\n     *  by the number of bytes copied if omitted.\r\n     * @param {number=} sourceOffset Offset to start copying from. Will use and increase {@link ByteBuffer#offset} by the\r\n     *  number of bytes copied if omitted.\r\n     * @param {number=} sourceLimit Offset to end copying from, defaults to {@link ByteBuffer#limit}\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.copyTo = function(target, targetOffset, sourceOffset, sourceLimit) {\r\n        var relative,\r\n            targetRelative;\r\n        if (!this.noAssert) {\r\n            if (!ByteBuffer.isByteBuffer(target))\r\n                throw TypeError(\"Illegal target: Not a ByteBuffer\");\r\n        }\r\n        targetOffset = (targetRelative = typeof targetOffset === 'undefined') ? target.offset : targetOffset | 0;\r\n        sourceOffset = (relative = typeof sourceOffset === 'undefined') ? this.offset : sourceOffset | 0;\r\n        sourceLimit = typeof sourceLimit === 'undefined' ? this.limit : sourceLimit | 0;\r\n\r\n        if (targetOffset < 0 || targetOffset > target.buffer.byteLength)\r\n            throw RangeError(\"Illegal target range: 0 <= \"+targetOffset+\" <= \"+target.buffer.byteLength);\r\n        if (sourceOffset < 0 || sourceLimit > this.buffer.byteLength)\r\n            throw RangeError(\"Illegal source range: 0 <= \"+sourceOffset+\" <= \"+this.buffer.byteLength);\r\n\r\n        var len = sourceLimit - sourceOffset;\r\n        if (len === 0)\r\n            return target; // Nothing to copy\r\n\r\n        target.ensureCapacity(targetOffset + len);\r\n\r\n        target.view.set(this.view.subarray(sourceOffset, sourceLimit), targetOffset);\r\n\r\n        if (relative) this.offset += len;\r\n        if (targetRelative) target.offset += len;\r\n\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Makes sure that this ByteBuffer is backed by a {@link ByteBuffer#buffer} of at least the specified capacity. If the\r\n     *  current capacity is exceeded, it will be doubled. If double the current capacity is less than the required capacity,\r\n     *  the required capacity will be used instead.\r\n     * @param {number} capacity Required capacity\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.ensureCapacity = function(capacity) {\r\n        var current = this.buffer.byteLength;\r\n        if (current < capacity)\r\n            return this.resize((current *= 2) > capacity ? current : capacity);\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Overwrites this ByteBuffer's contents with the specified value. Contents are the bytes between\r\n     *  {@link ByteBuffer#offset} and {@link ByteBuffer#limit}.\r\n     * @param {number|string} value Byte value to fill with. If given as a string, the first character is used.\r\n     * @param {number=} begin Begin offset. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n     *  written if omitted. defaults to {@link ByteBuffer#offset}.\r\n     * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     * @example `someByteBuffer.clear().fill(0)` fills the entire backing buffer with zeroes\r\n     */\r\n    ByteBufferPrototype.fill = function(value, begin, end) {\r\n        var relative = typeof begin === 'undefined';\n        if (relative) begin = this.offset;\n        if (typeof value === 'string' && value.length > 0)\r\n            value = value.charCodeAt(0);\r\n        if (typeof begin === 'undefined') begin = this.offset;\r\n        if (typeof end === 'undefined') end = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof value !== 'number' || value % 1 !== 0)\n                throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n            value |= 0;\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        if (begin >= end)\r\n            return this; // Nothing to fill\r\n        while (begin < end) this.view[begin++] = value;\r\n        if (relative) this.offset = begin;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Makes this ByteBuffer ready for a new sequence of write or relative read operations. Sets `limit = offset` and\r\n     *  `offset = 0`. Make sure always to flip a ByteBuffer when all relative read or write operations are complete.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.flip = function() {\r\n        this.limit = this.offset;\r\n        this.offset = 0;\r\n        return this;\r\n    };\r\n    /**\r\n     * Marks an offset on this ByteBuffer to be used later.\r\n     * @param {number=} offset Offset to mark. Defaults to {@link ByteBuffer#offset}.\r\n     * @returns {!ByteBuffer} this\r\n     * @throws {TypeError} If `offset` is not a valid number\r\n     * @throws {RangeError} If `offset` is out of bounds\r\n     * @see ByteBuffer#reset\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.mark = function(offset) {\r\n        offset = typeof offset === 'undefined' ? this.offset : offset;\r\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        this.markedOffset = offset;\r\n        return this;\r\n    };\r\n    /**\r\n     * Sets the byte order.\r\n     * @param {boolean} littleEndian `true` for little endian byte order, `false` for big endian\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.order = function(littleEndian) {\r\n        if (!this.noAssert) {\r\n            if (typeof littleEndian !== 'boolean')\r\n                throw TypeError(\"Illegal littleEndian: Not a boolean\");\r\n        }\r\n        this.littleEndian = !!littleEndian;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Switches (to) little endian byte order.\r\n     * @param {boolean=} littleEndian Defaults to `true`, otherwise uses big endian\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.LE = function(littleEndian) {\r\n        this.littleEndian = typeof littleEndian !== 'undefined' ? !!littleEndian : true;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Switches (to) big endian byte order.\r\n     * @param {boolean=} bigEndian Defaults to `true`, otherwise uses little endian\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.BE = function(bigEndian) {\r\n        this.littleEndian = typeof bigEndian !== 'undefined' ? !bigEndian : false;\r\n        return this;\r\n    };\r\n    /**\r\n     * Prepends some data to this ByteBuffer. This will overwrite any contents before the specified offset up to the\r\n     *  prepended data's length. If there is not enough space available before the specified `offset`, the backing buffer\r\n     *  will be resized and its contents moved accordingly.\r\n     * @param {!ByteBuffer|string|!ArrayBuffer} source Data to prepend. If `source` is a ByteBuffer, its offset will be\r\n     *  modified according to the performed read operation.\r\n     * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n     * @param {number=} offset Offset to prepend at. Will use and decrease {@link ByteBuffer#offset} by the number of bytes\r\n     *  prepended if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     * @example A relative `00<01 02 03>.prepend(<04 05>)` results in `<04 05 01 02 03>, 04 05|`\r\n     * @example An absolute `00<01 02 03>.prepend(<04 05>, 2)` results in `04<05 02 03>, 04 05|`\r\n     */\r\n    ByteBufferPrototype.prepend = function(source, encoding, offset) {\r\n        if (typeof encoding === 'number' || typeof encoding !== 'string') {\r\n            offset = encoding;\r\n            encoding = undefined;\r\n        }\r\n        var relative = typeof offset === 'undefined';\n        if (relative) offset = this.offset;\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n            offset >>>= 0;\n            if (offset < 0 || offset + 0 > this.buffer.byteLength)\n                throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n        }\r\n        if (!(source instanceof ByteBuffer))\r\n            source = ByteBuffer.wrap(source, encoding);\r\n        var len = source.limit - source.offset;\r\n        if (len <= 0) return this; // Nothing to prepend\r\n        var diff = len - offset;\r\n        if (diff > 0) { // Not enough space before offset, so resize + move\r\n            var buffer = new ArrayBuffer(this.buffer.byteLength + diff);\r\n            var view = new Uint8Array(buffer);\r\n            view.set(this.view.subarray(offset, this.buffer.byteLength), len);\r\n            this.buffer = buffer;\r\n            this.view = view;\r\n            this.offset += diff;\r\n            if (this.markedOffset >= 0) this.markedOffset += diff;\r\n            this.limit += diff;\r\n            offset += diff;\r\n        } else {\r\n            var arrayView = new Uint8Array(this.buffer);\r\n        }\r\n        this.view.set(source.view.subarray(source.offset, source.limit), offset - len);\r\n\r\n        source.offset = source.limit;\r\n        if (relative)\r\n            this.offset -= len;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Prepends this ByteBuffer to another ByteBuffer. This will overwrite any contents before the specified offset up to the\r\n     *  prepended data's length. If there is not enough space available before the specified `offset`, the backing buffer\r\n     *  will be resized and its contents moved accordingly.\r\n     * @param {!ByteBuffer} target Target ByteBuffer\r\n     * @param {number=} offset Offset to prepend at. Will use and decrease {@link ByteBuffer#offset} by the number of bytes\r\n     *  prepended if omitted.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     * @see ByteBuffer#prepend\r\n     */\r\n    ByteBufferPrototype.prependTo = function(target, offset) {\r\n        target.prepend(this, offset);\r\n        return this;\r\n    };\r\n    /**\r\n     * Prints debug information about this ByteBuffer's contents.\r\n     * @param {function(string)=} out Output function to call, defaults to console.log\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.printDebug = function(out) {\r\n        if (typeof out !== 'function') out = console.log.bind(console);\r\n        out(\r\n            this.toString()+\"\\n\"+\r\n            \"-------------------------------------------------------------------\\n\"+\r\n            this.toDebug(/* columns */ true)\r\n        );\r\n    };\r\n\r\n    /**\r\n     * Gets the number of remaining readable bytes. Contents are the bytes between {@link ByteBuffer#offset} and\r\n     *  {@link ByteBuffer#limit}, so this returns `limit - offset`.\r\n     * @returns {number} Remaining readable bytes. May be negative if `offset > limit`.\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.remaining = function() {\r\n        return this.limit - this.offset;\r\n    };\r\n    /**\r\n     * Resets this ByteBuffer's {@link ByteBuffer#offset}. If an offset has been marked through {@link ByteBuffer#mark}\r\n     *  before, `offset` will be set to {@link ByteBuffer#markedOffset}, which will then be discarded. If no offset has been\r\n     *  marked, sets `offset = 0`.\r\n     * @returns {!ByteBuffer} this\r\n     * @see ByteBuffer#mark\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.reset = function() {\r\n        if (this.markedOffset >= 0) {\r\n            this.offset = this.markedOffset;\r\n            this.markedOffset = -1;\r\n        } else {\r\n            this.offset = 0;\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Resizes this ByteBuffer to be backed by a buffer of at least the given capacity. Will do nothing if already that\r\n     *  large or larger.\r\n     * @param {number} capacity Capacity required\r\n     * @returns {!ByteBuffer} this\r\n     * @throws {TypeError} If `capacity` is not a number\r\n     * @throws {RangeError} If `capacity < 0`\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.resize = function(capacity) {\r\n        if (!this.noAssert) {\r\n            if (typeof capacity !== 'number' || capacity % 1 !== 0)\n                throw TypeError(\"Illegal capacity: \"+capacity+\" (not an integer)\");\n            capacity |= 0;\n            if (capacity < 0)\r\n                throw RangeError(\"Illegal capacity: 0 <= \"+capacity);\r\n        }\r\n        if (this.buffer.byteLength < capacity) {\r\n            var buffer = new ArrayBuffer(capacity);\r\n            var view = new Uint8Array(buffer);\r\n            view.set(this.view);\r\n            this.buffer = buffer;\r\n            this.view = view;\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Reverses this ByteBuffer's contents.\r\n     * @param {number=} begin Offset to start at, defaults to {@link ByteBuffer#offset}\r\n     * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.reverse = function(begin, end) {\r\n        if (typeof begin === 'undefined') begin = this.offset;\r\n        if (typeof end === 'undefined') end = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        if (begin === end)\r\n            return this; // Nothing to reverse\r\n        Array.prototype.reverse.call(this.view.subarray(begin, end));\r\n        return this;\r\n    };\r\n    /**\r\n     * Skips the next `length` bytes. This will just advance\r\n     * @param {number} length Number of bytes to skip. May also be negative to move the offset back.\r\n     * @returns {!ByteBuffer} this\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.skip = function(length) {\r\n        if (!this.noAssert) {\r\n            if (typeof length !== 'number' || length % 1 !== 0)\n                throw TypeError(\"Illegal length: \"+length+\" (not an integer)\");\n            length |= 0;\n        }\r\n        var offset = this.offset + length;\r\n        if (!this.noAssert) {\r\n            if (offset < 0 || offset > this.buffer.byteLength)\r\n                throw RangeError(\"Illegal length: 0 <= \"+this.offset+\" + \"+length+\" <= \"+this.buffer.byteLength);\r\n        }\r\n        this.offset = offset;\r\n        return this;\r\n    };\r\n\r\n    /**\r\n     * Slices this ByteBuffer by creating a cloned instance with `offset = begin` and `limit = end`.\r\n     * @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.\r\n     * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n     * @returns {!ByteBuffer} Clone of this ByteBuffer with slicing applied, backed by the same {@link ByteBuffer#buffer}\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.slice = function(begin, end) {\r\n        if (typeof begin === 'undefined') begin = this.offset;\r\n        if (typeof end === 'undefined') end = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        var bb = this.clone();\r\n        bb.offset = begin;\r\n        bb.limit = end;\r\n        return bb;\r\n    };\r\n    /**\r\n     * Returns a copy of the backing buffer that contains this ByteBuffer's contents. Contents are the bytes between\r\n     *  {@link ByteBuffer#offset} and {@link ByteBuffer#limit}.\r\n     * @param {boolean=} forceCopy If `true` returns a copy, otherwise returns a view referencing the same memory if\r\n     *  possible. Defaults to `false`\r\n     * @returns {!ArrayBuffer} Contents as an ArrayBuffer\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toBuffer = function(forceCopy) {\r\n        var offset = this.offset,\r\n            limit = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof offset !== 'number' || offset % 1 !== 0)\n                throw TypeError(\"Illegal offset: Not an integer\");\n            offset >>>= 0;\n            if (typeof limit !== 'number' || limit % 1 !== 0)\n                throw TypeError(\"Illegal limit: Not an integer\");\n            limit >>>= 0;\n            if (offset < 0 || offset > limit || limit > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+offset+\" <= \"+limit+\" <= \"+this.buffer.byteLength);\n        }\r\n        // NOTE: It's not possible to have another ArrayBuffer reference the same memory as the backing buffer. This is\r\n        // possible with Uint8Array#subarray only, but we have to return an ArrayBuffer by contract. So:\r\n        if (!forceCopy && offset === 0 && limit === this.buffer.byteLength)\r\n            return this.buffer;\r\n        if (offset === limit)\r\n            return EMPTY_BUFFER;\r\n        var buffer = new ArrayBuffer(limit - offset);\r\n        new Uint8Array(buffer).set(new Uint8Array(this.buffer).subarray(offset, limit), 0);\r\n        return buffer;\r\n    };\r\n\r\n    /**\r\n     * Returns a raw buffer compacted to contain this ByteBuffer's contents. Contents are the bytes between\r\n     *  {@link ByteBuffer#offset} and {@link ByteBuffer#limit}. This is an alias of {@link ByteBuffer#toBuffer}.\r\n     * @function\r\n     * @param {boolean=} forceCopy If `true` returns a copy, otherwise returns a view referencing the same memory.\r\n     *  Defaults to `false`\r\n     * @returns {!ArrayBuffer} Contents as an ArrayBuffer\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toArrayBuffer = ByteBufferPrototype.toBuffer;\r\n\r\n    /**\r\n     * Converts the ByteBuffer's contents to a string.\r\n     * @param {string=} encoding Output encoding. Returns an informative string representation if omitted but also allows\r\n     *  direct conversion to \"utf8\", \"hex\", \"base64\" and \"binary\" encoding. \"debug\" returns a hex representation with\r\n     *  highlighted offsets.\r\n     * @param {number=} begin Offset to begin at, defaults to {@link ByteBuffer#offset}\r\n     * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n     * @returns {string} String representation\r\n     * @throws {Error} If `encoding` is invalid\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toString = function(encoding, begin, end) {\r\n        if (typeof encoding === 'undefined')\r\n            return \"ByteBufferAB(offset=\"+this.offset+\",markedOffset=\"+this.markedOffset+\",limit=\"+this.limit+\",capacity=\"+this.capacity()+\")\";\r\n        if (typeof encoding === 'number')\r\n            encoding = \"utf8\",\r\n            begin = encoding,\r\n            end = begin;\r\n        switch (encoding) {\r\n            case \"utf8\":\r\n                return this.toUTF8(begin, end);\r\n            case \"base64\":\r\n                return this.toBase64(begin, end);\r\n            case \"hex\":\r\n                return this.toHex(begin, end);\r\n            case \"binary\":\r\n                return this.toBinary(begin, end);\r\n            case \"debug\":\r\n                return this.toDebug();\r\n            case \"columns\":\r\n                return this.toColumns();\r\n            default:\r\n                throw Error(\"Unsupported encoding: \"+encoding);\r\n        }\r\n    };\r\n\r\n    // lxiv-embeddable\r\n\r\n    /**\r\n     * lxiv-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>\r\n     * Released under the Apache License, Version 2.0\r\n     * see: https://github.com/dcodeIO/lxiv for details\r\n     */\r\n    var lxiv = function() {\r\n        \"use strict\";\r\n\r\n        /**\r\n         * lxiv namespace.\r\n         * @type {!Object.<string,*>}\r\n         * @exports lxiv\r\n         */\r\n        var lxiv = {};\r\n\r\n        /**\r\n         * Character codes for output.\r\n         * @type {!Array.<number>}\r\n         * @inner\r\n         */\r\n        var aout = [\r\n            65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,\r\n            81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102,\r\n            103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\r\n            119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47\r\n        ];\r\n\r\n        /**\r\n         * Character codes for input.\r\n         * @type {!Array.<number>}\r\n         * @inner\r\n         */\r\n        var ain = [];\r\n        for (var i=0, k=aout.length; i<k; ++i)\r\n            ain[aout[i]] = i;\r\n\r\n        /**\r\n         * Encodes bytes to base64 char codes.\r\n         * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if\r\n         *  there are no more bytes left.\r\n         * @param {!function(number)} dst Characters destination as a function successively called with each encoded char\r\n         *  code.\r\n         */\r\n        lxiv.encode = function(src, dst) {\r\n            var b, t;\r\n            while ((b = src()) !== null) {\r\n                dst(aout[(b>>2)&0x3f]);\r\n                t = (b&0x3)<<4;\r\n                if ((b = src()) !== null) {\r\n                    t |= (b>>4)&0xf;\r\n                    dst(aout[(t|((b>>4)&0xf))&0x3f]);\r\n                    t = (b&0xf)<<2;\r\n                    if ((b = src()) !== null)\r\n                        dst(aout[(t|((b>>6)&0x3))&0x3f]),\r\n                        dst(aout[b&0x3f]);\r\n                    else\r\n                        dst(aout[t&0x3f]),\r\n                        dst(61);\r\n                } else\r\n                    dst(aout[t&0x3f]),\r\n                    dst(61),\r\n                    dst(61);\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Decodes base64 char codes to bytes.\r\n         * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n         *  `null` if there are no more characters left.\r\n         * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n         * @throws {Error} If a character code is invalid\r\n         */\r\n        lxiv.decode = function(src, dst) {\r\n            var c, t1, t2;\r\n            function fail(c) {\r\n                throw Error(\"Illegal character code: \"+c);\r\n            }\r\n            while ((c = src()) !== null) {\r\n                t1 = ain[c];\r\n                if (typeof t1 === 'undefined') fail(c);\r\n                if ((c = src()) !== null) {\r\n                    t2 = ain[c];\r\n                    if (typeof t2 === 'undefined') fail(c);\r\n                    dst((t1<<2)>>>0|(t2&0x30)>>4);\r\n                    if ((c = src()) !== null) {\r\n                        t1 = ain[c];\r\n                        if (typeof t1 === 'undefined')\r\n                            if (c === 61) break; else fail(c);\r\n                        dst(((t2&0xf)<<4)>>>0|(t1&0x3c)>>2);\r\n                        if ((c = src()) !== null) {\r\n                            t2 = ain[c];\r\n                            if (typeof t2 === 'undefined')\r\n                                if (c === 61) break; else fail(c);\r\n                            dst(((t1&0x3)<<6)>>>0|t2);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Tests if a string is valid base64.\r\n         * @param {string} str String to test\r\n         * @returns {boolean} `true` if valid, otherwise `false`\r\n         */\r\n        lxiv.test = function(str) {\r\n            return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(str);\r\n        };\r\n\r\n        return lxiv;\r\n    }();\r\n\r\n    // encodings/base64\r\n\r\n    /**\r\n     * Encodes this ByteBuffer's contents to a base64 encoded string.\r\n     * @param {number=} begin Offset to begin at, defaults to {@link ByteBuffer#offset}.\r\n     * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}.\r\n     * @returns {string} Base64 encoded string\r\n     * @throws {RangeError} If `begin` or `end` is out of bounds\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toBase64 = function(begin, end) {\r\n        if (typeof begin === 'undefined')\r\n            begin = this.offset;\r\n        if (typeof end === 'undefined')\r\n            end = this.limit;\r\n        begin = begin | 0; end = end | 0;\r\n        if (begin < 0 || end > this.capacity || begin > end)\r\n            throw RangeError(\"begin, end\");\r\n        var sd; lxiv.encode(function() {\r\n            return begin < end ? this.view[begin++] : null;\r\n        }.bind(this), sd = stringDestination());\r\n        return sd();\r\n    };\r\n\r\n    /**\r\n     * Decodes a base64 encoded string to a ByteBuffer.\r\n     * @param {string} str String to decode\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @returns {!ByteBuffer} ByteBuffer\r\n     * @expose\r\n     */\r\n    ByteBuffer.fromBase64 = function(str, littleEndian) {\r\n        if (typeof str !== 'string')\r\n            throw TypeError(\"str\");\r\n        var bb = new ByteBuffer(str.length/4*3, littleEndian),\r\n            i = 0;\r\n        lxiv.decode(stringSource(str), function(b) {\r\n            bb.view[i++] = b;\r\n        });\r\n        bb.limit = i;\r\n        return bb;\r\n    };\r\n\r\n    /**\r\n     * Encodes a binary string to base64 like `window.btoa` does.\r\n     * @param {string} str Binary string\r\n     * @returns {string} Base64 encoded string\r\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa\r\n     * @expose\r\n     */\r\n    ByteBuffer.btoa = function(str) {\r\n        return ByteBuffer.fromBinary(str).toBase64();\r\n    };\r\n\r\n    /**\r\n     * Decodes a base64 encoded string to binary like `window.atob` does.\r\n     * @param {string} b64 Base64 encoded string\r\n     * @returns {string} Binary string\r\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.atob\r\n     * @expose\r\n     */\r\n    ByteBuffer.atob = function(b64) {\r\n        return ByteBuffer.fromBase64(b64).toBinary();\r\n    };\r\n\r\n    // encodings/binary\r\n\r\n    /**\r\n     * Encodes this ByteBuffer to a binary encoded string, that is using only characters 0x00-0xFF as bytes.\r\n     * @param {number=} begin Offset to begin at. Defaults to {@link ByteBuffer#offset}.\r\n     * @param {number=} end Offset to end at. Defaults to {@link ByteBuffer#limit}.\r\n     * @returns {string} Binary encoded string\r\n     * @throws {RangeError} If `offset > limit`\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toBinary = function(begin, end) {\r\n        if (typeof begin === 'undefined')\r\n            begin = this.offset;\r\n        if (typeof end === 'undefined')\r\n            end = this.limit;\r\n        begin |= 0; end |= 0;\r\n        if (begin < 0 || end > this.capacity() || begin > end)\r\n            throw RangeError(\"begin, end\");\r\n        if (begin === end)\r\n            return \"\";\r\n        var chars = [],\r\n            parts = [];\r\n        while (begin < end) {\r\n            chars.push(this.view[begin++]);\r\n            if (chars.length >= 1024)\r\n                parts.push(String.fromCharCode.apply(String, chars)),\r\n                chars = [];\r\n        }\r\n        return parts.join('') + String.fromCharCode.apply(String, chars);\r\n    };\r\n\r\n    /**\r\n     * Decodes a binary encoded string, that is using only characters 0x00-0xFF as bytes, to a ByteBuffer.\r\n     * @param {string} str String to decode\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @returns {!ByteBuffer} ByteBuffer\r\n     * @expose\r\n     */\r\n    ByteBuffer.fromBinary = function(str, littleEndian) {\r\n        if (typeof str !== 'string')\r\n            throw TypeError(\"str\");\r\n        var i = 0,\r\n            k = str.length,\r\n            charCode,\r\n            bb = new ByteBuffer(k, littleEndian);\r\n        while (i<k) {\r\n            charCode = str.charCodeAt(i);\r\n            if (charCode > 0xff)\r\n                throw RangeError(\"illegal char code: \"+charCode);\r\n            bb.view[i++] = charCode;\r\n        }\r\n        bb.limit = k;\r\n        return bb;\r\n    };\r\n\r\n    // encodings/debug\r\n\r\n    /**\r\n     * Encodes this ByteBuffer to a hex encoded string with marked offsets. Offset symbols are:\r\n     * * `<` : offset,\r\n     * * `'` : markedOffset,\r\n     * * `>` : limit,\r\n     * * `|` : offset and limit,\r\n     * * `[` : offset and markedOffset,\r\n     * * `]` : markedOffset and limit,\r\n     * * `!` : offset, markedOffset and limit\r\n     * @param {boolean=} columns If `true` returns two columns hex + ascii, defaults to `false`\r\n     * @returns {string|!Array.<string>} Debug string or array of lines if `asArray = true`\r\n     * @expose\r\n     * @example `>00'01 02<03` contains four bytes with `limit=0, markedOffset=1, offset=3`\r\n     * @example `00[01 02 03>` contains four bytes with `offset=markedOffset=1, limit=4`\r\n     * @example `00|01 02 03` contains four bytes with `offset=limit=1, markedOffset=-1`\r\n     * @example `|` contains zero bytes with `offset=limit=0, markedOffset=-1`\r\n     */\r\n    ByteBufferPrototype.toDebug = function(columns) {\r\n        var i = -1,\r\n            k = this.buffer.byteLength,\r\n            b,\r\n            hex = \"\",\r\n            asc = \"\",\r\n            out = \"\";\r\n        while (i<k) {\r\n            if (i !== -1) {\r\n                b = this.view[i];\r\n                if (b < 0x10) hex += \"0\"+b.toString(16).toUpperCase();\r\n                else hex += b.toString(16).toUpperCase();\r\n                if (columns)\r\n                    asc += b > 32 && b < 127 ? String.fromCharCode(b) : '.';\r\n            }\r\n            ++i;\r\n            if (columns) {\r\n                if (i > 0 && i % 16 === 0 && i !== k) {\r\n                    while (hex.length < 3*16+3) hex += \" \";\r\n                    out += hex+asc+\"\\n\";\r\n                    hex = asc = \"\";\r\n                }\r\n            }\r\n            if (i === this.offset && i === this.limit)\r\n                hex += i === this.markedOffset ? \"!\" : \"|\";\r\n            else if (i === this.offset)\r\n                hex += i === this.markedOffset ? \"[\" : \"<\";\r\n            else if (i === this.limit)\r\n                hex += i === this.markedOffset ? \"]\" : \">\";\r\n            else\r\n                hex += i === this.markedOffset ? \"'\" : (columns || (i !== 0 && i !== k) ? \" \" : \"\");\r\n        }\r\n        if (columns && hex !== \" \") {\r\n            while (hex.length < 3*16+3)\r\n                hex += \" \";\r\n            out += hex + asc + \"\\n\";\r\n        }\r\n        return columns ? out : hex;\r\n    };\r\n\r\n    /**\r\n     * Decodes a hex encoded string with marked offsets to a ByteBuffer.\r\n     * @param {string} str Debug string to decode (not be generated with `columns = true`)\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @returns {!ByteBuffer} ByteBuffer\r\n     * @expose\r\n     * @see ByteBuffer#toDebug\r\n     */\r\n    ByteBuffer.fromDebug = function(str, littleEndian, noAssert) {\r\n        var k = str.length,\r\n            bb = new ByteBuffer(((k+1)/3)|0, littleEndian, noAssert);\r\n        var i = 0, j = 0, ch, b,\r\n            rs = false, // Require symbol next\r\n            ho = false, hm = false, hl = false, // Already has offset (ho), markedOffset (hm), limit (hl)?\r\n            fail = false;\r\n        while (i<k) {\r\n            switch (ch = str.charAt(i++)) {\r\n                case '!':\r\n                    if (!noAssert) {\r\n                        if (ho || hm || hl) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        ho = hm = hl = true;\r\n                    }\r\n                    bb.offset = bb.markedOffset = bb.limit = j;\r\n                    rs = false;\r\n                    break;\r\n                case '|':\r\n                    if (!noAssert) {\r\n                        if (ho || hl) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        ho = hl = true;\r\n                    }\r\n                    bb.offset = bb.limit = j;\r\n                    rs = false;\r\n                    break;\r\n                case '[':\r\n                    if (!noAssert) {\r\n                        if (ho || hm) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        ho = hm = true;\r\n                    }\r\n                    bb.offset = bb.markedOffset = j;\r\n                    rs = false;\r\n                    break;\r\n                case '<':\r\n                    if (!noAssert) {\r\n                        if (ho) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        ho = true;\r\n                    }\r\n                    bb.offset = j;\r\n                    rs = false;\r\n                    break;\r\n                case ']':\r\n                    if (!noAssert) {\r\n                        if (hl || hm) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        hl = hm = true;\r\n                    }\r\n                    bb.limit = bb.markedOffset = j;\r\n                    rs = false;\r\n                    break;\r\n                case '>':\r\n                    if (!noAssert) {\r\n                        if (hl) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        hl = true;\r\n                    }\r\n                    bb.limit = j;\r\n                    rs = false;\r\n                    break;\r\n                case \"'\":\r\n                    if (!noAssert) {\r\n                        if (hm) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                        hm = true;\r\n                    }\r\n                    bb.markedOffset = j;\r\n                    rs = false;\r\n                    break;\r\n                case ' ':\r\n                    rs = false;\r\n                    break;\r\n                default:\r\n                    if (!noAssert) {\r\n                        if (rs) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                    }\r\n                    b = parseInt(ch+str.charAt(i++), 16);\r\n                    if (!noAssert) {\r\n                        if (isNaN(b) || b < 0 || b > 255)\r\n                            throw TypeError(\"Illegal str: Not a debug encoded string\");\r\n                    }\r\n                    bb.view[j++] = b;\r\n                    rs = true;\r\n            }\r\n            if (fail)\r\n                throw TypeError(\"Illegal str: Invalid symbol at \"+i);\r\n        }\r\n        if (!noAssert) {\r\n            if (!ho || !hl)\r\n                throw TypeError(\"Illegal str: Missing offset or limit\");\r\n            if (j<bb.buffer.byteLength)\r\n                throw TypeError(\"Illegal str: Not a debug encoded string (is it hex?) \"+j+\" < \"+k);\r\n        }\r\n        return bb;\r\n    };\r\n\r\n    // encodings/hex\r\n\r\n    /**\r\n     * Encodes this ByteBuffer's contents to a hex encoded string.\r\n     * @param {number=} begin Offset to begin at. Defaults to {@link ByteBuffer#offset}.\r\n     * @param {number=} end Offset to end at. Defaults to {@link ByteBuffer#limit}.\r\n     * @returns {string} Hex encoded string\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toHex = function(begin, end) {\r\n        begin = typeof begin === 'undefined' ? this.offset : begin;\r\n        end = typeof end === 'undefined' ? this.limit : end;\r\n        if (!this.noAssert) {\r\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        var out = new Array(end - begin),\r\n            b;\r\n        while (begin < end) {\r\n            b = this.view[begin++];\r\n            if (b < 0x10)\r\n                out.push(\"0\", b.toString(16));\r\n            else out.push(b.toString(16));\r\n        }\r\n        return out.join('');\r\n    };\r\n\r\n    /**\r\n     * Decodes a hex encoded string to a ByteBuffer.\r\n     * @param {string} str String to decode\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @returns {!ByteBuffer} ByteBuffer\r\n     * @expose\r\n     */\r\n    ByteBuffer.fromHex = function(str, littleEndian, noAssert) {\r\n        if (!noAssert) {\r\n            if (typeof str !== 'string')\r\n                throw TypeError(\"Illegal str: Not a string\");\r\n            if (str.length % 2 !== 0)\r\n                throw TypeError(\"Illegal str: Length not a multiple of 2\");\r\n        }\r\n        var k = str.length,\r\n            bb = new ByteBuffer((k / 2) | 0, littleEndian),\r\n            b;\r\n        for (var i=0, j=0; i<k; i+=2) {\r\n            b = parseInt(str.substring(i, i+2), 16);\r\n            if (!noAssert)\r\n                if (!isFinite(b) || b < 0 || b > 255)\r\n                    throw TypeError(\"Illegal str: Contains non-hex characters\");\r\n            bb.view[j++] = b;\r\n        }\r\n        bb.limit = j;\r\n        return bb;\r\n    };\r\n\r\n    // utfx-embeddable\r\n\r\n    /**\r\n     * utfx-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>\r\n     * Released under the Apache License, Version 2.0\r\n     * see: https://github.com/dcodeIO/utfx for details\r\n     */\r\n    var utfx = function() {\r\n        \"use strict\";\r\n\r\n        /**\r\n         * utfx namespace.\r\n         * @inner\r\n         * @type {!Object.<string,*>}\r\n         */\r\n        var utfx = {};\r\n\r\n        /**\r\n         * Maximum valid code point.\r\n         * @type {number}\r\n         * @const\r\n         */\r\n        utfx.MAX_CODEPOINT = 0x10FFFF;\r\n\r\n        /**\r\n         * Encodes UTF8 code points to UTF8 bytes.\r\n         * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n         *  respectively `null` if there are no more code points left or a single numeric code point.\r\n         * @param {!function(number)} dst Bytes destination as a function successively called with the next byte\r\n         */\r\n        utfx.encodeUTF8 = function(src, dst) {\r\n            var cp = null;\r\n            if (typeof src === 'number')\r\n                cp = src,\r\n                src = function() { return null; };\r\n            while (cp !== null || (cp = src()) !== null) {\r\n                if (cp < 0x80)\r\n                    dst(cp&0x7F);\r\n                else if (cp < 0x800)\r\n                    dst(((cp>>6)&0x1F)|0xC0),\r\n                    dst((cp&0x3F)|0x80);\r\n                else if (cp < 0x10000)\r\n                    dst(((cp>>12)&0x0F)|0xE0),\r\n                    dst(((cp>>6)&0x3F)|0x80),\r\n                    dst((cp&0x3F)|0x80);\r\n                else\r\n                    dst(((cp>>18)&0x07)|0xF0),\r\n                    dst(((cp>>12)&0x3F)|0x80),\r\n                    dst(((cp>>6)&0x3F)|0x80),\r\n                    dst((cp&0x3F)|0x80);\r\n                cp = null;\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Decodes UTF8 bytes to UTF8 code points.\r\n         * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n         *  are no more bytes left.\r\n         * @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.\r\n         * @throws {RangeError} If a starting byte is invalid in UTF8\r\n         * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the\r\n         *  remaining bytes.\r\n         */\r\n        utfx.decodeUTF8 = function(src, dst) {\r\n            var a, b, c, d, fail = function(b) {\r\n                b = b.slice(0, b.indexOf(null));\r\n                var err = Error(b.toString());\r\n                err.name = \"TruncatedError\";\r\n                err['bytes'] = b;\r\n                throw err;\r\n            };\r\n            while ((a = src()) !== null) {\r\n                if ((a&0x80) === 0)\r\n                    dst(a);\r\n                else if ((a&0xE0) === 0xC0)\r\n                    ((b = src()) === null) && fail([a, b]),\r\n                    dst(((a&0x1F)<<6) | (b&0x3F));\r\n                else if ((a&0xF0) === 0xE0)\r\n                    ((b=src()) === null || (c=src()) === null) && fail([a, b, c]),\r\n                    dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));\r\n                else if ((a&0xF8) === 0xF0)\r\n                    ((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),\r\n                    dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));\r\n                else throw RangeError(\"Illegal starting byte: \"+a);\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Converts UTF16 characters to UTF8 code points.\r\n         * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n         *  `null` if there are no more characters left.\r\n         * @param {!function(number)} dst Code points destination as a function successively called with each converted code\r\n         *  point.\r\n         */\r\n        utfx.UTF16toUTF8 = function(src, dst) {\r\n            var c1, c2 = null;\r\n            while (true) {\r\n                if ((c1 = c2 !== null ? c2 : src()) === null)\r\n                    break;\r\n                if (c1 >= 0xD800 && c1 <= 0xDFFF) {\r\n                    if ((c2 = src()) !== null) {\r\n                        if (c2 >= 0xDC00 && c2 <= 0xDFFF) {\r\n                            dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);\r\n                            c2 = null; continue;\r\n                        }\r\n                    }\r\n                }\r\n                dst(c1);\r\n            }\r\n            if (c2 !== null) dst(c2);\r\n        };\r\n\r\n        /**\r\n         * Converts UTF8 code points to UTF16 characters.\r\n         * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n         *  respectively `null` if there are no more code points left or a single numeric code point.\r\n         * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n         * @throws {RangeError} If a code point is out of range\r\n         */\r\n        utfx.UTF8toUTF16 = function(src, dst) {\r\n            var cp = null;\r\n            if (typeof src === 'number')\r\n                cp = src, src = function() { return null; };\r\n            while (cp !== null || (cp = src()) !== null) {\r\n                if (cp <= 0xFFFF)\r\n                    dst(cp);\r\n                else\r\n                    cp -= 0x10000,\r\n                    dst((cp>>10)+0xD800),\r\n                    dst((cp%0x400)+0xDC00);\r\n                cp = null;\r\n            }\r\n        };\r\n\r\n        /**\r\n         * Converts and encodes UTF16 characters to UTF8 bytes.\r\n         * @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`\r\n         *  if there are no more characters left.\r\n         * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n         */\r\n        utfx.encodeUTF16toUTF8 = function(src, dst) {\r\n            utfx.UTF16toUTF8(src, function(cp) {\r\n                utfx.encodeUTF8(cp, dst);\r\n            });\r\n        };\r\n\r\n        /**\r\n         * Decodes and converts UTF8 bytes to UTF16 characters.\r\n         * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n         *  are no more bytes left.\r\n         * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n         * @throws {RangeError} If a starting byte is invalid in UTF8\r\n         * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.\r\n         */\r\n        utfx.decodeUTF8toUTF16 = function(src, dst) {\r\n            utfx.decodeUTF8(src, function(cp) {\r\n                utfx.UTF8toUTF16(cp, dst);\r\n            });\r\n        };\r\n\r\n        /**\r\n         * Calculates the byte length of an UTF8 code point.\r\n         * @param {number} cp UTF8 code point\r\n         * @returns {number} Byte length\r\n         */\r\n        utfx.calculateCodePoint = function(cp) {\r\n            return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n        };\r\n\r\n        /**\r\n         * Calculates the number of UTF8 bytes required to store UTF8 code points.\r\n         * @param {(!function():number|null)} src Code points source as a function returning the next code point respectively\r\n         *  `null` if there are no more code points left.\r\n         * @returns {number} The number of UTF8 bytes required\r\n         */\r\n        utfx.calculateUTF8 = function(src) {\r\n            var cp, l=0;\r\n            while ((cp = src()) !== null)\r\n                l += (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n            return l;\r\n        };\r\n\r\n        /**\r\n         * Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.\r\n         * @param {(!function():number|null)} src Characters source as a function returning the next char code respectively\r\n         *  `null` if there are no more characters left.\r\n         * @returns {!Array.<number>} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.\r\n         */\r\n        utfx.calculateUTF16asUTF8 = function(src) {\r\n            var n=0, l=0;\r\n            utfx.UTF16toUTF8(src, function(cp) {\r\n                ++n; l += (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n            });\r\n            return [n,l];\r\n        };\r\n\r\n        return utfx;\r\n    }();\r\n\r\n    // encodings/utf8\r\n\r\n    /**\r\n     * Encodes this ByteBuffer's contents between {@link ByteBuffer#offset} and {@link ByteBuffer#limit} to an UTF8 encoded\r\n     *  string.\r\n     * @returns {string} Hex encoded string\r\n     * @throws {RangeError} If `offset > limit`\r\n     * @expose\r\n     */\r\n    ByteBufferPrototype.toUTF8 = function(begin, end) {\r\n        if (typeof begin === 'undefined') begin = this.offset;\r\n        if (typeof end === 'undefined') end = this.limit;\r\n        if (!this.noAssert) {\r\n            if (typeof begin !== 'number' || begin % 1 !== 0)\n                throw TypeError(\"Illegal begin: Not an integer\");\n            begin >>>= 0;\n            if (typeof end !== 'number' || end % 1 !== 0)\n                throw TypeError(\"Illegal end: Not an integer\");\n            end >>>= 0;\n            if (begin < 0 || begin > end || end > this.buffer.byteLength)\n                throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n        }\r\n        var sd; try {\r\n            utfx.decodeUTF8toUTF16(function() {\r\n                return begin < end ? this.view[begin++] : null;\r\n            }.bind(this), sd = stringDestination());\r\n        } catch (e) {\r\n            if (begin !== end)\r\n                throw RangeError(\"Illegal range: Truncated data, \"+begin+\" != \"+end);\r\n        }\r\n        return sd();\r\n    };\r\n\r\n    /**\r\n     * Decodes an UTF8 encoded string to a ByteBuffer.\r\n     * @param {string} str String to decode\r\n     * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n     * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n     *  {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n     * @returns {!ByteBuffer} ByteBuffer\r\n     * @expose\r\n     */\r\n    ByteBuffer.fromUTF8 = function(str, littleEndian, noAssert) {\r\n        if (!noAssert)\r\n            if (typeof str !== 'string')\r\n                throw TypeError(\"Illegal str: Not a string\");\r\n        var bb = new ByteBuffer(utfx.calculateUTF16asUTF8(stringSource(str), true)[1], littleEndian, noAssert),\r\n            i = 0;\r\n        utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n            bb.view[i++] = b;\r\n        });\r\n        bb.limit = i;\r\n        return bb;\r\n    };\r\n\r\n    return ByteBuffer;\r\n});\r\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256)\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i)\n    var xc = x.charCodeAt(0)\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i\n  }\n  var BASE = ALPHABET.length\n  var LEADER = ALPHABET.charAt(0)\n  var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n    if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0\n    var length = 0\n    var pbegin = 0\n    var pend = source.length\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++\n      zeroes++\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n    var b58 = new Uint8Array(size)\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin]\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0\n        b58[it1] = (carry % BASE) >>> 0\n        carry = (carry / BASE) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      pbegin++\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length\n    while (it2 !== size && b58[it2] === 0) {\n      it2++\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes)\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return _Buffer.alloc(0) }\n    var psz = 0\n        // Skip and count leading '1's.\n    var zeroes = 0\n    var length = 0\n    while (source[psz] === LEADER) {\n      zeroes++\n      psz++\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size)\n        // Process the characters.\n    while (psz < source.length) {\n            // Find code of next character\n      var charCode = source.charCodeAt(psz)\n            // Base map can not be indexed using char code\n      if (charCode > 255) { return }\n            // Decode character\n      var carry = BASE_MAP[charCode]\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0\n        b256[it3] = (carry % 256) >>> 0\n        carry = (carry / 256) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      psz++\n    }\n        // Skip leading zeroes in b256.\n    var it4 = size - length\n    while (it4 !== size && b256[it4] === 0) {\n      it4++\n    }\n    var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n    vch.fill(0x00, 0, zeroes)\n    var j = zeroes\n    while (it4 !== size) {\n      vch[j++] = b256[it4++]\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string)\n    if (buffer) { return buffer }\n    throw new Error('Non-base' + BASE + ' character')\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nmodule.exports = base\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","// Copyright (c) 2012, Mark Cavage. All rights reserved.\n// Copyright 2015 Joyent, Inc.\n\nvar assert = require('assert');\nvar Stream = require('stream').Stream;\nvar util = require('util');\n\n\n///--- Globals\n\n/* JSSTYLED */\nvar 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}$/;\n\n\n///--- Internal\n\nfunction _capitalize(str) {\n    return (str.charAt(0).toUpperCase() + str.slice(1));\n}\n\nfunction _toss(name, expected, oper, arg, actual) {\n    throw new assert.AssertionError({\n        message: util.format('%s (%s) is required', name, expected),\n        actual: (actual === undefined) ? typeof (arg) : actual(arg),\n        expected: expected,\n        operator: oper || '===',\n        stackStartFunction: _toss.caller\n    });\n}\n\nfunction _getClass(arg) {\n    return (Object.prototype.toString.call(arg).slice(8, -1));\n}\n\nfunction noop() {\n    // Why even bother with asserts?\n}\n\n\n///--- Exports\n\nvar types = {\n    bool: {\n        check: function (arg) { return typeof (arg) === 'boolean'; }\n    },\n    func: {\n        check: function (arg) { return typeof (arg) === 'function'; }\n    },\n    string: {\n        check: function (arg) { return typeof (arg) === 'string'; }\n    },\n    object: {\n        check: function (arg) {\n            return typeof (arg) === 'object' && arg !== null;\n        }\n    },\n    number: {\n        check: function (arg) {\n            return typeof (arg) === 'number' && !isNaN(arg);\n        }\n    },\n    finite: {\n        check: function (arg) {\n            return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg);\n        }\n    },\n    buffer: {\n        check: function (arg) { return Buffer.isBuffer(arg); },\n        operator: 'Buffer.isBuffer'\n    },\n    array: {\n        check: function (arg) { return Array.isArray(arg); },\n        operator: 'Array.isArray'\n    },\n    stream: {\n        check: function (arg) { return arg instanceof Stream; },\n        operator: 'instanceof',\n        actual: _getClass\n    },\n    date: {\n        check: function (arg) { return arg instanceof Date; },\n        operator: 'instanceof',\n        actual: _getClass\n    },\n    regexp: {\n        check: function (arg) { return arg instanceof RegExp; },\n        operator: 'instanceof',\n        actual: _getClass\n    },\n    uuid: {\n        check: function (arg) {\n            return typeof (arg) === 'string' && UUID_REGEXP.test(arg);\n        },\n        operator: 'isUUID'\n    }\n};\n\nfunction _setExports(ndebug) {\n    var keys = Object.keys(types);\n    var out;\n\n    /* re-export standard assert */\n    if (process.env.NODE_NDEBUG) {\n        out = noop;\n    } else {\n        out = function (arg, msg) {\n            if (!arg) {\n                _toss(msg, 'true', arg);\n            }\n        };\n    }\n\n    /* standard checks */\n    keys.forEach(function (k) {\n        if (ndebug) {\n            out[k] = noop;\n            return;\n        }\n        var type = types[k];\n        out[k] = function (arg, msg) {\n            if (!type.check(arg)) {\n                _toss(msg, k, type.operator, arg, type.actual);\n            }\n        };\n    });\n\n    /* optional checks */\n    keys.forEach(function (k) {\n        var name = 'optional' + _capitalize(k);\n        if (ndebug) {\n            out[name] = noop;\n            return;\n        }\n        var type = types[k];\n        out[name] = function (arg, msg) {\n            if (arg === undefined || arg === null) {\n                return;\n            }\n            if (!type.check(arg)) {\n                _toss(msg, k, type.operator, arg, type.actual);\n            }\n        };\n    });\n\n    /* arrayOf checks */\n    keys.forEach(function (k) {\n        var name = 'arrayOf' + _capitalize(k);\n        if (ndebug) {\n            out[name] = noop;\n            return;\n        }\n        var type = types[k];\n        var expected = '[' + k + ']';\n        out[name] = function (arg, msg) {\n            if (!Array.isArray(arg)) {\n                _toss(msg, expected, type.operator, arg, type.actual);\n            }\n            var i;\n            for (i = 0; i < arg.length; i++) {\n                if (!type.check(arg[i])) {\n                    _toss(msg, expected, type.operator, arg, type.actual);\n                }\n            }\n        };\n    });\n\n    /* optionalArrayOf checks */\n    keys.forEach(function (k) {\n        var name = 'optionalArrayOf' + _capitalize(k);\n        if (ndebug) {\n            out[name] = noop;\n            return;\n        }\n        var type = types[k];\n        var expected = '[' + k + ']';\n        out[name] = function (arg, msg) {\n            if (arg === undefined || arg === null) {\n                return;\n            }\n            if (!Array.isArray(arg)) {\n                _toss(msg, expected, type.operator, arg, type.actual);\n            }\n            var i;\n            for (i = 0; i < arg.length; i++) {\n                if (!type.check(arg[i])) {\n                    _toss(msg, expected, type.operator, arg, type.actual);\n                }\n            }\n        };\n    });\n\n    /* re-export built-in assertions */\n    Object.keys(assert).forEach(function (k) {\n        if (k === 'AssertionError') {\n            out[k] = assert[k];\n            return;\n        }\n        if (ndebug) {\n            out[k] = noop;\n            return;\n        }\n        out[k] = assert[k];\n    });\n\n    /* export ourselves (for unit tests _only_) */\n    out._setExports = _setExports;\n\n    return out;\n}\n\nmodule.exports = _setExports(process.env.NODE_NDEBUG);\n","/*\n * extsprintf.js: extended POSIX-style sprintf\n */\n\nvar mod_assert = require('assert');\nvar mod_util = require('util');\n\n/*\n * Public interface\n */\nexports.sprintf = jsSprintf;\nexports.printf = jsPrintf;\nexports.fprintf = jsFprintf;\n\n/*\n * Stripped down version of s[n]printf(3c).  We make a best effort to throw an\n * exception when given a format string we don't understand, rather than\n * ignoring it, so that we won't break existing programs if/when we go implement\n * the rest of this.\n *\n * This implementation currently supports specifying\n *\t- field alignment ('-' flag),\n * \t- zero-pad ('0' flag)\n *\t- always show numeric sign ('+' flag),\n *\t- field width\n *\t- conversions for strings, decimal integers, and floats (numbers).\n *\t- argument size specifiers.  These are all accepted but ignored, since\n *\t  Javascript has no notion of the physical size of an argument.\n *\n * Everything else is currently unsupported, most notably precision, unsigned\n * numbers, non-decimal numbers, and characters.\n */\nfunction jsSprintf(fmt)\n{\n\tvar regex = [\n\t    '([^%]*)',\t\t\t\t/* normal text */\n\t    '%',\t\t\t\t/* start of format */\n\t    '([\\'\\\\-+ #0]*?)',\t\t\t/* flags (optional) */\n\t    '([1-9]\\\\d*)?',\t\t\t/* width (optional) */\n\t    '(\\\\.([1-9]\\\\d*))?',\t\t/* precision (optional) */\n\t    '[lhjztL]*?',\t\t\t/* length mods (ignored) */\n\t    '([diouxXfFeEgGaAcCsSp%jr])'\t/* conversion */\n\t].join('');\n\n\tvar re = new RegExp(regex);\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\tvar flags, width, precision, conversion;\n\tvar left, pad, sign, arg, match;\n\tvar ret = '';\n\tvar argn = 1;\n\n\tmod_assert.equal('string', typeof (fmt));\n\n\twhile ((match = re.exec(fmt)) !== null) {\n\t\tret += match[1];\n\t\tfmt = fmt.substring(match[0].length);\n\n\t\tflags = match[2] || '';\n\t\twidth = match[3] || 0;\n\t\tprecision = match[4] || '';\n\t\tconversion = match[6];\n\t\tleft = false;\n\t\tsign = false;\n\t\tpad = ' ';\n\n\t\tif (conversion == '%') {\n\t\t\tret += '%';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (args.length === 0)\n\t\t\tthrow (new Error('too few args to sprintf'));\n\n\t\targ = args.shift();\n\t\targn++;\n\n\t\tif (flags.match(/[\\' #]/))\n\t\t\tthrow (new Error(\n\t\t\t    'unsupported flags: ' + flags));\n\n\t\tif (precision.length > 0)\n\t\t\tthrow (new Error(\n\t\t\t    'non-zero precision not supported'));\n\n\t\tif (flags.match(/-/))\n\t\t\tleft = true;\n\n\t\tif (flags.match(/0/))\n\t\t\tpad = '0';\n\n\t\tif (flags.match(/\\+/))\n\t\t\tsign = true;\n\n\t\tswitch (conversion) {\n\t\tcase 's':\n\t\t\tif (arg === undefined || arg === null)\n\t\t\t\tthrow (new Error('argument ' + argn +\n\t\t\t\t    ': attempted to print undefined or null ' +\n\t\t\t\t    'as a string'));\n\t\t\tret += doPad(pad, width, left, arg.toString());\n\t\t\tbreak;\n\n\t\tcase 'd':\n\t\t\targ = Math.floor(arg);\n\t\t\t/*jsl:fallthru*/\n\t\tcase 'f':\n\t\t\tsign = sign && arg > 0 ? '+' : '';\n\t\t\tret += sign + doPad(pad, width, left,\n\t\t\t    arg.toString());\n\t\t\tbreak;\n\n\t\tcase 'x':\n\t\t\tret += doPad(pad, width, left, arg.toString(16));\n\t\t\tbreak;\n\n\t\tcase 'j': /* non-standard */\n\t\t\tif (width === 0)\n\t\t\t\twidth = 10;\n\t\t\tret += mod_util.inspect(arg, false, width);\n\t\t\tbreak;\n\n\t\tcase 'r': /* non-standard */\n\t\t\tret += dumpException(arg);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow (new Error('unsupported conversion: ' +\n\t\t\t    conversion));\n\t\t}\n\t}\n\n\tret += fmt;\n\treturn (ret);\n}\n\nfunction jsPrintf() {\n\tvar args = Array.prototype.slice.call(arguments);\n\targs.unshift(process.stdout);\n\tjsFprintf.apply(null, args);\n}\n\nfunction jsFprintf(stream) {\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\treturn (stream.write(jsSprintf.apply(this, args)));\n}\n\nfunction doPad(chr, width, left, str)\n{\n\tvar ret = str;\n\n\twhile (ret.length < width) {\n\t\tif (left)\n\t\t\tret += chr;\n\t\telse\n\t\t\tret = chr + ret;\n\t}\n\n\treturn (ret);\n}\n\n/*\n * This function dumps long stack traces for exceptions having a cause() method.\n * See node-verror for an example.\n */\nfunction dumpException(ex)\n{\n\tvar ret;\n\n\tif (!(ex instanceof Error))\n\t\tthrow (new Error(jsSprintf('invalid type for %%r: %j', ex)));\n\n\t/* Note that V8 prepends \"ex.stack\" with ex.toString(). */\n\tret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack;\n\n\tif (ex.cause && typeof (ex.cause) === 'function') {\n\t\tvar cex = ex.cause();\n\t\tif (cex) {\n\t\t\tret += '\\nCaused by: ' + dumpException(cex);\n\t\t}\n\t}\n\n\treturn (ret);\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","/*\n * verror.js: richer JavaScript errors\n */\n\nvar mod_assertplus = require('assert-plus');\nvar mod_util = require('util');\n\nvar mod_extsprintf = require('extsprintf');\nvar mod_isError = require('core-util-is').isError;\nvar sprintf = mod_extsprintf.sprintf;\n\n/*\n * Public interface\n */\n\n/* So you can 'var VError = require('verror')' */\nmodule.exports = VError;\n/* For compatibility */\nVError.VError = VError;\n/* Other exported classes */\nVError.SError = SError;\nVError.WError = WError;\nVError.MultiError = MultiError;\n\n/*\n * Common function used to parse constructor arguments for VError, WError, and\n * SError.  Named arguments to this function:\n *\n *     strict\t\tforce strict interpretation of sprintf arguments, even\n *     \t\t\tif the options in \"argv\" don't say so\n *\n *     argv\t\terror's constructor arguments, which are to be\n *     \t\t\tinterpreted as described in README.md.  For quick\n *     \t\t\treference, \"argv\" has one of the following forms:\n *\n *          [ sprintf_args... ]           (argv[0] is a string)\n *          [ cause, sprintf_args... ]    (argv[0] is an Error)\n *          [ options, sprintf_args... ]  (argv[0] is an object)\n *\n * This function normalizes these forms, producing an object with the following\n * properties:\n *\n *    options           equivalent to \"options\" in third form.  This will never\n *    \t\t\tbe a direct reference to what the caller passed in\n *    \t\t\t(i.e., it may be a shallow copy), so it can be freely\n *    \t\t\tmodified.\n *\n *    shortmessage      result of sprintf(sprintf_args), taking options.strict\n *    \t\t\tinto account as described in README.md.\n */\nfunction parseConstructorArguments(args)\n{\n\tvar argv, options, sprintf_args, shortmessage, k;\n\n\tmod_assertplus.object(args, 'args');\n\tmod_assertplus.bool(args.strict, 'args.strict');\n\tmod_assertplus.array(args.argv, 'args.argv');\n\targv = args.argv;\n\n\t/*\n\t * First, figure out which form of invocation we've been given.\n\t */\n\tif (argv.length === 0) {\n\t\toptions = {};\n\t\tsprintf_args = [];\n\t} else if (mod_isError(argv[0])) {\n\t\toptions = { 'cause': argv[0] };\n\t\tsprintf_args = argv.slice(1);\n\t} else if (typeof (argv[0]) === 'object') {\n\t\toptions = {};\n\t\tfor (k in argv[0]) {\n\t\t\toptions[k] = argv[0][k];\n\t\t}\n\t\tsprintf_args = argv.slice(1);\n\t} else {\n\t\tmod_assertplus.string(argv[0],\n\t\t    'first argument to VError, SError, or WError ' +\n\t\t    'constructor must be a string, object, or Error');\n\t\toptions = {};\n\t\tsprintf_args = argv;\n\t}\n\n\t/*\n\t * Now construct the error's message.\n\t *\n\t * extsprintf (which we invoke here with our caller's arguments in order\n\t * to construct this Error's message) is strict in its interpretation of\n\t * values to be processed by the \"%s\" specifier.  The value passed to\n\t * extsprintf must actually be a string or something convertible to a\n\t * String using .toString().  Passing other values (notably \"null\" and\n\t * \"undefined\") is considered a programmer error.  The assumption is\n\t * that if you actually want to print the string \"null\" or \"undefined\",\n\t * then that's easy to do that when you're calling extsprintf; on the\n\t * other hand, if you did NOT want that (i.e., there's actually a bug\n\t * where the program assumes some variable is non-null and tries to\n\t * print it, which might happen when constructing a packet or file in\n\t * some specific format), then it's better to stop immediately than\n\t * produce bogus output.\n\t *\n\t * However, sometimes the bug is only in the code calling VError, and a\n\t * programmer might prefer to have the error message contain \"null\" or\n\t * \"undefined\" rather than have the bug in the error path crash the\n\t * program (making the first bug harder to identify).  For that reason,\n\t * by default VError converts \"null\" or \"undefined\" arguments to their\n\t * string representations and passes those to extsprintf.  Programmers\n\t * desiring the strict behavior can use the SError class or pass the\n\t * \"strict\" option to the VError constructor.\n\t */\n\tmod_assertplus.object(options);\n\tif (!options.strict && !args.strict) {\n\t\tsprintf_args = sprintf_args.map(function (a) {\n\t\t\treturn (a === null ? 'null' :\n\t\t\t    a === undefined ? 'undefined' : a);\n\t\t});\n\t}\n\n\tif (sprintf_args.length === 0) {\n\t\tshortmessage = '';\n\t} else {\n\t\tshortmessage = sprintf.apply(null, sprintf_args);\n\t}\n\n\treturn ({\n\t    'options': options,\n\t    'shortmessage': shortmessage\n\t});\n}\n\n/*\n * See README.md for reference documentation.\n */\nfunction VError()\n{\n\tvar args, obj, parsed, cause, ctor, message, k;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\n\t/*\n\t * This is a regrettable pattern, but JavaScript's built-in Error class\n\t * is defined to work this way, so we allow the constructor to be called\n\t * without \"new\".\n\t */\n\tif (!(this instanceof VError)) {\n\t\tobj = Object.create(VError.prototype);\n\t\tVError.apply(obj, arguments);\n\t\treturn (obj);\n\t}\n\n\t/*\n\t * For convenience and backwards compatibility, we support several\n\t * different calling forms.  Normalize them here.\n\t */\n\tparsed = parseConstructorArguments({\n\t    'argv': args,\n\t    'strict': false\n\t});\n\n\t/*\n\t * If we've been given a name, apply it now.\n\t */\n\tif (parsed.options.name) {\n\t\tmod_assertplus.string(parsed.options.name,\n\t\t    'error\\'s \"name\" must be a string');\n\t\tthis.name = parsed.options.name;\n\t}\n\n\t/*\n\t * For debugging, we keep track of the original short message (attached\n\t * this Error particularly) separately from the complete message (which\n\t * includes the messages of our cause chain).\n\t */\n\tthis.jse_shortmsg = parsed.shortmessage;\n\tmessage = parsed.shortmessage;\n\n\t/*\n\t * If we've been given a cause, record a reference to it and update our\n\t * message appropriately.\n\t */\n\tcause = parsed.options.cause;\n\tif (cause) {\n\t\tmod_assertplus.ok(mod_isError(cause), 'cause is not an Error');\n\t\tthis.jse_cause = cause;\n\n\t\tif (!parsed.options.skipCauseMessage) {\n\t\t\tmessage += ': ' + cause.message;\n\t\t}\n\t}\n\n\t/*\n\t * If we've been given an object with properties, shallow-copy that\n\t * here.  We don't want to use a deep copy in case there are non-plain\n\t * objects here, but we don't want to use the original object in case\n\t * the caller modifies it later.\n\t */\n\tthis.jse_info = {};\n\tif (parsed.options.info) {\n\t\tfor (k in parsed.options.info) {\n\t\t\tthis.jse_info[k] = parsed.options.info[k];\n\t\t}\n\t}\n\n\tthis.message = message;\n\tError.call(this, message);\n\n\tif (Error.captureStackTrace) {\n\t\tctor = parsed.options.constructorOpt || this.constructor;\n\t\tError.captureStackTrace(this, ctor);\n\t}\n\n\treturn (this);\n}\n\nmod_util.inherits(VError, Error);\nVError.prototype.name = 'VError';\n\nVError.prototype.toString = function ve_toString()\n{\n\tvar str = (this.hasOwnProperty('name') && this.name ||\n\t\tthis.constructor.name || this.constructor.prototype.name);\n\tif (this.message)\n\t\tstr += ': ' + this.message;\n\n\treturn (str);\n};\n\n/*\n * This method is provided for compatibility.  New callers should use\n * VError.cause() instead.  That method also uses the saner `null` return value\n * when there is no cause.\n */\nVError.prototype.cause = function ve_cause()\n{\n\tvar cause = VError.cause(this);\n\treturn (cause === null ? undefined : cause);\n};\n\n/*\n * Static methods\n *\n * These class-level methods are provided so that callers can use them on\n * instances of Errors that are not VErrors.  New interfaces should be provided\n * only using static methods to eliminate the class of programming mistake where\n * people fail to check whether the Error object has the corresponding methods.\n */\n\nVError.cause = function (err)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\treturn (mod_isError(err.jse_cause) ? err.jse_cause : null);\n};\n\nVError.info = function (err)\n{\n\tvar rv, cause, k;\n\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tcause = VError.cause(err);\n\tif (cause !== null) {\n\t\trv = VError.info(cause);\n\t} else {\n\t\trv = {};\n\t}\n\n\tif (typeof (err.jse_info) == 'object' && err.jse_info !== null) {\n\t\tfor (k in err.jse_info) {\n\t\t\trv[k] = err.jse_info[k];\n\t\t}\n\t}\n\n\treturn (rv);\n};\n\nVError.findCauseByName = function (err, name)\n{\n\tvar cause;\n\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tmod_assertplus.string(name, 'name');\n\tmod_assertplus.ok(name.length > 0, 'name cannot be empty');\n\n\tfor (cause = err; cause !== null; cause = VError.cause(cause)) {\n\t\tmod_assertplus.ok(mod_isError(cause));\n\t\tif (cause.name == name) {\n\t\t\treturn (cause);\n\t\t}\n\t}\n\n\treturn (null);\n};\n\nVError.hasCauseWithName = function (err, name)\n{\n\treturn (VError.findCauseByName(err, name) !== null);\n};\n\nVError.fullStack = function (err)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\n\tvar cause = VError.cause(err);\n\n\tif (cause) {\n\t\treturn (err.stack + '\\ncaused by: ' + VError.fullStack(cause));\n\t}\n\n\treturn (err.stack);\n};\n\nVError.errorFromList = function (errors)\n{\n\tmod_assertplus.arrayOfObject(errors, 'errors');\n\n\tif (errors.length === 0) {\n\t\treturn (null);\n\t}\n\n\terrors.forEach(function (e) {\n\t\tmod_assertplus.ok(mod_isError(e));\n\t});\n\n\tif (errors.length == 1) {\n\t\treturn (errors[0]);\n\t}\n\n\treturn (new MultiError(errors));\n};\n\nVError.errorForEach = function (err, func)\n{\n\tmod_assertplus.ok(mod_isError(err), 'err must be an Error');\n\tmod_assertplus.func(func, 'func');\n\n\tif (err instanceof MultiError) {\n\t\terr.errors().forEach(function iterError(e) { func(e); });\n\t} else {\n\t\tfunc(err);\n\t}\n};\n\n\n/*\n * SError is like VError, but stricter about types.  You cannot pass \"null\" or\n * \"undefined\" as string arguments to the formatter.\n */\nfunction SError()\n{\n\tvar args, obj, parsed, options;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\tif (!(this instanceof SError)) {\n\t\tobj = Object.create(SError.prototype);\n\t\tSError.apply(obj, arguments);\n\t\treturn (obj);\n\t}\n\n\tparsed = parseConstructorArguments({\n\t    'argv': args,\n\t    'strict': true\n\t});\n\n\toptions = parsed.options;\n\tVError.call(this, options, '%s', parsed.shortmessage);\n\n\treturn (this);\n}\n\n/*\n * We don't bother setting SError.prototype.name because once constructed,\n * SErrors are just like VErrors.\n */\nmod_util.inherits(SError, VError);\n\n\n/*\n * Represents a collection of errors for the purpose of consumers that generally\n * only deal with one error.  Callers can extract the individual errors\n * contained in this object, but may also just treat it as a normal single\n * error, in which case a summary message will be printed.\n */\nfunction MultiError(errors)\n{\n\tmod_assertplus.array(errors, 'list of errors');\n\tmod_assertplus.ok(errors.length > 0, 'must be at least one error');\n\tthis.ase_errors = errors;\n\n\tVError.call(this, {\n\t    'cause': errors[0]\n\t}, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's');\n}\n\nmod_util.inherits(MultiError, VError);\nMultiError.prototype.name = 'MultiError';\n\nMultiError.prototype.errors = function me_errors()\n{\n\treturn (this.ase_errors.slice(0));\n};\n\n\n/*\n * See README.md for reference details.\n */\nfunction WError()\n{\n\tvar args, obj, parsed, options;\n\n\targs = Array.prototype.slice.call(arguments, 0);\n\tif (!(this instanceof WError)) {\n\t\tobj = Object.create(WError.prototype);\n\t\tWError.apply(obj, args);\n\t\treturn (obj);\n\t}\n\n\tparsed = parseConstructorArguments({\n\t    'argv': args,\n\t    'strict': false\n\t});\n\n\toptions = parsed.options;\n\toptions['skipCauseMessage'] = true;\n\tVError.call(this, options, '%s', parsed.shortmessage);\n\n\treturn (this);\n}\n\nmod_util.inherits(WError, VError);\nWError.prototype.name = 'WError';\n\nWError.prototype.toString = function we_toString()\n{\n\tvar str = (this.hasOwnProperty('name') && this.name ||\n\t\tthis.constructor.name || this.constructor.prototype.name);\n\tif (this.message)\n\t\tstr += ': ' + this.message;\n\tif (this.jse_cause && this.jse_cause.message)\n\t\tstr += '; caused by ' + this.jse_cause.toString();\n\n\treturn (str);\n};\n\n/*\n * For purely historical reasons, WError's cause() function allows you to set\n * the cause.\n */\nWError.prototype.cause = function we_cause(c)\n{\n\tif (mod_isError(c))\n\t\tthis.jse_cause = c;\n\n\treturn (this.jse_cause);\n};\n","{\n  \"name\": \"@blazeapps/dsteem\",\n  \"version\": \"0.12.2\",\n  \"description\": \"Modernized Steem blockchain RPC client library for Node.js, browsers, and React Native (fork of jnordberg/dsteem).\",\n  \"author\": \"Johan Nordberg\",\n  \"contributors\": [\n    {\n      \"name\": \"blaze.apps\",\n      \"url\": \"https://github.com/blazeapps007\"\n    }\n  ],\n  \"license\": \"BSD-3-Clause\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"react-native\": \"./dist/index.browser.cjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"react-native\": \"./dist/index.browser.mjs\",\n      \"browser\": \"./dist/index.browser.mjs\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"engines\": {\n    \"node\": \">=22.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/blazeapps007/dsteem.git\"\n  },\n  \"homepage\": \"https://blazeapps007.github.io/dsteem/\",\n  \"bugs\": {\n    \"url\": \"https://github.com/blazeapps007/dsteem/issues\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"lint\": \"eslint src test\",\n    \"test\": \"mocha\",\n    \"test:all\": \"mocha --extension ts test\",\n    \"coverage\": \"c8 npm test\",\n    \"test:browser\": \"npm run build && playwright test\",\n    \"build:docs\": \"typedoc\",\n    \"prepublishOnly\": \"npm run lint && npm run build && npm test\"\n  },\n  \"keywords\": [\n    \"blockchain\",\n    \"client\",\n    \"rpc\",\n    \"steem\",\n    \"dsteem\",\n    \"blazeapps\"\n  ],\n  \"dependencies\": {\n    \"@noble/curves\": \"^1.9.7\",\n    \"@noble/hashes\": \"^1.8.0\",\n    \"bs58\": \"^4.0.1\",\n    \"bytebuffer\": \"^5.0.1\",\n    \"verror\": \"^1.10.0\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"^9.15.0\",\n    \"@playwright/test\": \"^1.60.0\",\n    \"@types/bs58\": \"^4.0.4\",\n    \"@types/bytebuffer\": \"^5.0.33\",\n    \"@types/mocha\": \"^10.0.10\",\n    \"@types/node\": \"^22.10.1\",\n    \"@types/verror\": \"^1.10.3\",\n    \"c8\": \"^10.1.3\",\n    \"esbuild-plugin-polyfill-node\": \"^0.3.0\",\n    \"eslint\": \"^9.15.0\",\n    \"globals\": \"^15.12.0\",\n    \"lorem-ipsum\": \"^1.0.6\",\n    \"mocha\": \"^11.7.6\",\n    \"ts-node\": \"^10.9.2\",\n    \"tsup\": \"^8.5.1\",\n    \"typedoc\": \"^0.28.19\",\n    \"typescript\": \"^5.6.3\",\n    \"typescript-eslint\": \"^8.16.0\"\n  }\n}\n","/**\r\n * @file Misc utility functions.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport {EventEmitter} from 'events'\r\nimport {PassThrough} from 'stream'\r\n\r\nconst fetch = global['fetch']  \r\n\r\n/**\r\n * Return a promise that will resove when a specific event is emitted.\r\n */\r\nexport function waitForEvent<T>(emitter: EventEmitter, eventName: string|symbol): Promise<T> {\r\n    return new Promise((resolve, _reject) => {\r\n        emitter.once(eventName, resolve)\r\n    })\r\n}\r\n\r\n/**\r\n * Sleep for N milliseconds.\r\n */\r\nexport function sleep(ms: number): Promise<void> {\r\n    return new Promise<void>((resolve) => {\r\n        setTimeout(resolve, ms)\r\n    })\r\n}\r\n\r\n/**\r\n * Return a stream that emits iterator values.\r\n */\r\nexport function iteratorStream<T>(iterator: AsyncIterableIterator<T>): NodeJS.ReadableStream {\r\n    const stream = new PassThrough({objectMode: true})\r\n    const iterate = async () => {\r\n        for await (const item of iterator) {\r\n            if (!stream.write(item)) {\r\n                await waitForEvent(stream, 'drain')\r\n            }\r\n        }\r\n    }\r\n    iterate().then(() => {\r\n        stream.end()\r\n    }).catch((error) => {\r\n        stream.emit('error', error)\r\n        stream.end()\r\n    })\r\n    return stream\r\n}\r\n\r\n/**\r\n * Return a deep copy of a JSON-serializable object.\r\n */\r\nexport function copy<T>(object: T): T {\r\n    return JSON.parse(JSON.stringify(object))\r\n}\r\n\r\n/**\r\n * Fetch API wrapper that retries until timeout is reached.\r\n */\r\nexport async function retryingFetch(url: string, opts: any, timeout: number,\r\n    backoff: (tries: number) => number,\r\n    fetchTimeout?: (tries: number) => number) {\r\n    const start = Date.now()\r\n    let tries = 0\r\n    do {\r\n        try {\r\n            if (fetchTimeout) {\r\n                opts.timeout = fetchTimeout(tries)\r\n            }\r\n            const response = await fetch(url, opts)\r\n            if (!response.ok) {\r\n                throw new Error(`HTTP ${ response.status }: ${ response.statusText }`)\r\n            }\r\n            return await response.json()\r\n        } catch (error) {\r\n            if (timeout !== 0 && Date.now() - start > timeout) {\r\n                throw error\r\n            }\r\n            await sleep(backoff(tries++))\r\n        }\r\n    } while (true) // eslint-disable-line no-constant-condition\r\n}\r\n\r\n// Hack to be able to generate a valid witness_set_properties op\r\n// Can hopefully be removed when steemd's JSON representation is fixed\r\nimport ByteBuffer from 'bytebuffer'\r\nimport {PublicKey} from './crypto'\r\nimport {Asset, PriceType} from './steem/asset'\r\nimport {WitnessSetPropertiesOperation} from './steem/operation'\r\nimport {Serializer, Types} from './steem/serializer'\r\nexport interface WitnessProps {\r\n    account_creation_fee?: string | Asset\r\n    account_subsidy_budget?: number // uint32_t\r\n    account_subsidy_decay?: number // uint32_t\r\n    key: PublicKey | string\r\n    maximum_block_size?: number // uint32_t\r\n    new_signing_key?: PublicKey | string | null\r\n    sbd_exchange_rate?: PriceType\r\n    sbd_interest_rate?: number // uint16_t\r\n    url?: string\r\n}\r\nfunction serialize(serializer: Serializer, data: any) {\r\n    const buffer = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN)\r\n    serializer(buffer, data)\r\n    buffer.flip()\r\n    return Buffer.from(buffer.toBuffer())\r\n}\r\nexport function buildWitnessUpdateOp(owner: string, props: WitnessProps): WitnessSetPropertiesOperation {\r\n    const data: WitnessSetPropertiesOperation[1] = {\r\n        extensions: [], owner, props: []\r\n    }\r\n    for (const key of Object.keys(props)) {\r\n        let type: Serializer\r\n        switch (key) {\r\n            case 'key':\r\n            case 'new_signing_key':\r\n                type = Types.PublicKey\r\n                break\r\n            case 'account_subsidy_budget':\r\n            case 'account_subsidy_decay':\r\n            case 'maximum_block_size':\r\n                type = Types.UInt32\r\n                break\r\n            case 'sbd_interest_rate':\r\n                type = Types.UInt16\r\n                break\r\n            case 'url':\r\n                type = Types.String\r\n                break\r\n            case 'sbd_exchange_rate':\r\n                type = Types.Price\r\n                break\r\n            case 'account_creation_fee':\r\n                type = Types.Asset\r\n                break\r\n            default:\r\n                throw new Error(`Unknown witness prop: ${ key }`)\r\n        }\r\n        data.props.push([key, serialize(type, props[key])])\r\n    }\r\n    data.props.sort((a, b) => a[0].localeCompare(b[0]))\r\n    return ['witness_set_properties', data]\r\n}\r\n","/**\r\n * @file Steem crypto helpers.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport assert from 'assert'\r\nimport bs58 from 'bs58'\r\nimport ByteBuffer from 'bytebuffer'\r\nimport {secp256k1 as nobleSecp} from '@noble/curves/secp256k1'\r\nimport {sha256 as nobleSha256} from '@noble/hashes/sha256'\r\nimport {ripemd160 as nobleRipemd160} from '@noble/hashes/ripemd160'\r\nimport {inspect as utilInspect} from 'util'\r\nimport {VError} from 'verror'\r\n\r\n// Node 12+ uses Symbol.for('nodejs.util.inspect.custom') for the inspect\r\n// contract. The legacy `inspect()` method name is also preserved on each\r\n// class for backward compatibility with code that calls it explicitly.\r\nconst INSPECT_SYMBOL: symbol = utilInspect.custom ?? Symbol.for('nodejs.util.inspect.custom')\r\n\r\nimport {DEFAULT_ADDRESS_PREFIX, DEFAULT_CHAIN_ID} from './client'\r\nimport {Types} from './steem/serializer'\r\nimport {SignedTransaction, Transaction} from './steem/transaction'\r\nimport {copy} from './utils'\r\n\r\n/**\r\n * Network id used in WIF-encoding.\r\n */\r\nexport const NETWORK_ID = Buffer.from([0x80])\r\n\r\n/**\r\n * Return ripemd160 hash of input.\r\n */\r\nfunction ripemd160(input: Buffer | string): Buffer {\r\n    const data = typeof input === 'string' ? Buffer.from(input) : input\r\n    return Buffer.from(nobleRipemd160(data))\r\n}\r\n\r\n/**\r\n * Return sha256 hash of input.\r\n */\r\nfunction sha256(input: Buffer | string): Buffer {\r\n    const data = typeof input === 'string' ? Buffer.from(input) : input\r\n    return Buffer.from(nobleSha256(data))\r\n}\r\n\r\n/**\r\n * Internal wrappers mapping the legacy `secp256k1` (v3.x) API onto\r\n * @noble/curves. Public surface (PublicKey/PrivateKey/Signature/cryptoUtils)\r\n * is unchanged; the golden-vector test ensures bit-identical output.\r\n */\r\nfunction publicKeyVerify(key: Buffer): boolean {\r\n    try { nobleSecp.ProjectivePoint.fromHex(key); return true } catch { return false }\r\n}\r\nfunction privateKeyVerify(key: Buffer): boolean {\r\n    return key.length === 32 && nobleSecp.utils.isValidPrivateKey(key)\r\n}\r\nfunction publicKeyCreate(priv: Buffer): Buffer {\r\n    return Buffer.from(nobleSecp.getPublicKey(priv, true))\r\n}\r\nfunction ecSign(message: Buffer, priv: Buffer, extraEntropy: Buffer): {signature: Buffer, recovery: number} {\r\n    // lowS: false — steemd's canonical-form check (isCanonicalSignature below)\r\n    // is byte-pattern based, not low-S; the legacy code retried until canonical\r\n    // and we preserve that loop in PrivateKey.sign.\r\n    const sig = nobleSecp.sign(message, priv, {extraEntropy, lowS: false})\r\n    return {signature: Buffer.from(sig.toCompactRawBytes()), recovery: sig.recovery!}\r\n}\r\nfunction ecVerify(message: Buffer, sigBuf: Buffer, pub: Buffer): boolean {\r\n    return nobleSecp.verify(sigBuf, message, pub, {lowS: false})\r\n}\r\nfunction ecRecover(message: Buffer, sigBuf: Buffer, recovery: number): Buffer {\r\n    const sig = nobleSecp.Signature.fromCompact(sigBuf).addRecoveryBit(recovery)\r\n    return Buffer.from(sig.recoverPublicKey(message).toRawBytes(true))\r\n}\r\n\r\n/**\r\n * Return 2-round sha256 hash of input.\r\n */\r\nfunction doubleSha256(input: Buffer | string): Buffer {\r\n    return sha256(sha256(input))\r\n}\r\n\r\n/**\r\n * Encode public key with bs58+ripemd160-checksum.\r\n */\r\nfunction encodePublic(key: Buffer, prefix: string): string {\r\n    const checksum = ripemd160(key)\r\n    return prefix + bs58.encode(Buffer.concat([key, checksum.slice(0, 4)]))\r\n}\r\n\r\n/**\r\n * Decode bs58+ripemd160-checksum encoded public key.\r\n */\r\nfunction decodePublic(encodedKey: string): {key: Buffer, prefix: string} {\r\n    const prefix = encodedKey.slice(0, 3)\r\n    assert.equal(prefix.length, 3, 'public key invalid prefix')\r\n    encodedKey = encodedKey.slice(3)\r\n    const buffer: Buffer = bs58.decode(encodedKey)\r\n    const checksum = buffer.slice(-4)\r\n    const key = buffer.slice(0, -4)\r\n    const checksumVerify = ripemd160(key).slice(0, 4)\r\n    assert.deepEqual(checksumVerify, checksum, 'public key checksum mismatch')\r\n    return {key, prefix}\r\n}\r\n\r\n/**\r\n * Encode bs58+doubleSha256-checksum private key.\r\n */\r\nfunction encodePrivate(key: Buffer): string {\r\n    assert.equal(key.readUInt8(0), 0x80, 'private key network id mismatch')\r\n    const checksum = doubleSha256(key)\r\n    return bs58.encode(Buffer.concat([key, checksum.slice(0, 4)]))\r\n}\r\n\r\n/**\r\n * Decode bs58+doubleSha256-checksum encoded private key.\r\n */\r\nfunction decodePrivate(encodedKey: string): Buffer {\r\n    const buffer: Buffer = bs58.decode(encodedKey)\r\n    assert.deepEqual(buffer.slice(0, 1), NETWORK_ID, 'private key network id mismatch')\r\n    const checksum = buffer.slice(-4)\r\n    const key = buffer.slice(0, -4)\r\n    const checksumVerify = doubleSha256(key).slice(0, 4)\r\n    assert.deepEqual(checksumVerify, checksum, 'private key checksum mismatch')\r\n    return key\r\n}\r\n\r\n/**\r\n * Return true if signature is canonical, otherwise false.\r\n */\r\nfunction isCanonicalSignature(signature: Buffer): boolean {\r\n    return (\r\n        !(signature[0] & 0x80) &&\r\n        !(signature[0] === 0 && !(signature[1] & 0x80)) &&\r\n        !(signature[32] & 0x80) &&\r\n        !(signature[32] === 0 && !(signature[33] & 0x80))\r\n    )\r\n}\r\n\r\n/**\r\n * ECDSA (secp256k1) public key.\r\n */\r\nexport class PublicKey {\r\n\r\n    /**\r\n     * Create a new instance from a WIF-encoded key.\r\n     */\r\n    public static fromString(wif: string) {\r\n        const {key, prefix} = decodePublic(wif)\r\n        return new PublicKey(key, prefix)\r\n    }\r\n\r\n    /**\r\n     * Create a new instance.\r\n     */\r\n    public static from(value: string | PublicKey) {\r\n        if (value instanceof PublicKey) {\r\n            return value\r\n        } else {\r\n            return PublicKey.fromString(value)\r\n        }\r\n    }\r\n\r\n    constructor(public readonly key: Buffer, public readonly prefix = DEFAULT_ADDRESS_PREFIX) {\r\n        assert(publicKeyVerify(key), 'invalid public key')\r\n    }\r\n\r\n    /**\r\n     * Verify a 32-byte signature.\r\n     * @param message 32-byte message to verify.\r\n     * @param signature Signature to verify.\r\n     */\r\n    public verify(message: Buffer, signature: Signature): boolean {\r\n        return ecVerify(message, signature.data, this.key)\r\n    }\r\n\r\n    /**\r\n     * Return a WIF-encoded representation of the key.\r\n     */\r\n    public toString() {\r\n        return encodePublic(this.key, this.prefix)\r\n    }\r\n\r\n    /**\r\n     * Return JSON representation of this key, same as toString().\r\n     */\r\n    public toJSON() {\r\n        return this.toString()\r\n    }\r\n\r\n    /**\r\n     * Used by `utils.inspect` and `console.log` in node.js.\r\n     */\r\n    public inspect() {\r\n        return `PublicKey: ${ this.toString() }`\r\n    }\r\n\r\n    public [INSPECT_SYMBOL]() {\r\n        return this.inspect()\r\n    }\r\n\r\n}\r\n\r\nexport type KeyRole = 'owner' | 'active' | 'posting' | 'memo'\r\n\r\n/**\r\n * ECDSA (secp256k1) private key.\r\n */\r\nexport class PrivateKey {\r\n\r\n    /**\r\n     * Convenience to create a new instance from WIF string or buffer.\r\n     */\r\n    public static from(value: string | Buffer) {\r\n        if (typeof value === 'string') {\r\n            return PrivateKey.fromString(value)\r\n        } else {\r\n            return new PrivateKey(value)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Create a new instance from a WIF-encoded key.\r\n     */\r\n    public static fromString(wif: string) {\r\n        return new PrivateKey(decodePrivate(wif).slice(1))\r\n    }\r\n\r\n    /**\r\n     * Create a new instance from a seed.\r\n     */\r\n    public static fromSeed(seed: string) {\r\n        return new PrivateKey(sha256(seed))\r\n    }\r\n\r\n    /**\r\n     * Create key from username and password.\r\n     */\r\n    public static fromLogin(username: string, password: string, role: KeyRole = 'active') {\r\n        const seed = username + role + password\r\n        return PrivateKey.fromSeed(seed)\r\n    }\r\n\r\n    constructor(private key: Buffer) {\r\n        assert(privateKeyVerify(key), 'invalid private key')\r\n    }\r\n\r\n    /**\r\n     * Sign message.\r\n     * @param message 32-byte message.\r\n     */\r\n    public sign(message: Buffer): Signature {\r\n        let rv: {signature: Buffer, recovery: number}\r\n        let attempts = 0\r\n        do {\r\n            const extraEntropy = sha256(Buffer.concat([message, Buffer.alloc(1, ++attempts)]))\r\n            rv = ecSign(message, this.key, extraEntropy)\r\n        } while (!isCanonicalSignature(rv.signature))\r\n        return new Signature(rv.signature, rv.recovery)\r\n    }\r\n\r\n    /**\r\n     * Derive the public key for this private key.\r\n     */\r\n    public createPublic(prefix?: string): PublicKey {\r\n        return new PublicKey(publicKeyCreate(this.key), prefix)\r\n    }\r\n\r\n    /**\r\n     * Return a WIF-encoded representation of the key.\r\n     */\r\n    public toString() {\r\n        return encodePrivate(Buffer.concat([NETWORK_ID, this.key]))\r\n    }\r\n\r\n    /**\r\n     * Used by `utils.inspect` and `console.log` in node.js. Does not show the full key\r\n     * to get the full encoded key you need to explicitly call {@link toString}.\r\n     */\r\n    public inspect() {\r\n        const key = this.toString()\r\n        return `PrivateKey: ${ key.slice(0, 6) }...${ key.slice(-6) }`\r\n    }\r\n\r\n    public [INSPECT_SYMBOL]() {\r\n        return this.inspect()\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * ECDSA (secp256k1) signature.\r\n */\r\nexport class Signature {\r\n\r\n    public static fromBuffer(buffer: Buffer) {\r\n        assert.equal(buffer.length, 65, 'invalid signature')\r\n        const recovery = buffer.readUInt8(0) - 31\r\n        const data = buffer.slice(1)\r\n        return new Signature(data, recovery)\r\n    }\r\n\r\n    public static fromString(string: string) {\r\n        return Signature.fromBuffer(Buffer.from(string, 'hex'))\r\n    }\r\n\r\n    constructor(public data: Buffer, public recovery: number) {\r\n        assert.equal(data.length, 64, 'invalid signature')\r\n    }\r\n\r\n    /**\r\n     * Recover public key from signature by providing original signed message.\r\n     * @param message 32-byte message that was used to create the signature.\r\n     */\r\n    public recover(message: Buffer, prefix?: string) {\r\n        return new PublicKey(ecRecover(message, this.data, this.recovery), prefix)\r\n    }\r\n\r\n    public toBuffer() {\r\n        const buffer = Buffer.alloc(65)\r\n        buffer.writeUInt8(this.recovery + 31, 0)\r\n        this.data.copy(buffer, 1)\r\n        return buffer\r\n    }\r\n\r\n    public toString() {\r\n        return this.toBuffer().toString('hex')\r\n    }\r\n\r\n}\r\n/**\r\n * Return the sha256 transaction digest.\r\n * @param chainId The chain id to use when creating the hash.\r\n */\r\nfunction transactionDigest(transaction: Transaction | SignedTransaction, chainId: Buffer = DEFAULT_CHAIN_ID) {\r\n    const buffer = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN)\r\n    try {\r\n        Types.Transaction(buffer, transaction)\r\n    } catch (cause) {\r\n        throw new VError({cause, name: 'SerializationError'}, 'Unable to serialize transaction')\r\n    }\r\n    buffer.flip()\r\n\r\n    const transactionData = Buffer.from(buffer.toBuffer())\r\n    const digest = sha256(Buffer.concat([chainId, transactionData]))\r\n    return digest\r\n}\r\n\r\n/**\r\n * Return copy of transaction with signature appended to signatures array.\r\n * @param transaction Transaction to sign.\r\n * @param keys Key(s) to sign transaction with.\r\n * @param chainId 32-byte chain id (defaults to mainnet). Match `Client.chainId`.\r\n */\r\nfunction signTransaction(\r\n    transaction: Transaction,\r\n    keys: PrivateKey | PrivateKey[],\r\n    chainId: Buffer = DEFAULT_CHAIN_ID\r\n) {\r\n    const digest = transactionDigest(transaction, chainId)\r\n    const signedTransaction = copy(transaction) as SignedTransaction\r\n    if (!signedTransaction.signatures) {\r\n        signedTransaction.signatures = []\r\n    }\r\n\r\n    if (!Array.isArray(keys)) { keys = [keys] }\r\n    for (const key of keys) {\r\n        const signature = key.sign(digest)\r\n        signedTransaction.signatures.push(signature.toString())\r\n    }\r\n\r\n    return signedTransaction\r\n}\r\n\r\n/** Misc crypto utility functions. */\r\nexport const cryptoUtils = {\r\n    decodePrivate,\r\n    doubleSha256,\r\n    encodePrivate,\r\n    encodePublic,\r\n    isCanonicalSignature,\r\n    ripemd160,\r\n    sha256,\r\n    signTransaction,\r\n    transactionDigest\r\n}\r\n","/**\r\n * @file Steem RPC client implementation.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport assert from 'assert'\r\nimport {VError} from 'verror'\r\nimport packageVersion from './version'\r\n\r\nimport {Blockchain} from './helpers/blockchain'\r\nimport {BroadcastAPI} from './helpers/broadcast'\r\nimport {DatabaseAPI} from './helpers/database'\r\nimport {RCAPI} from './helpers/rc'\r\nimport {copy, retryingFetch} from './utils'\r\n\r\n/**\r\n * Library version.\r\n */\r\nexport const VERSION = packageVersion\r\n\r\n/**\r\n * Main steem network chain id.\r\n */\r\nexport const DEFAULT_CHAIN_ID = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')\r\n\r\n/**\r\n * Main steem network address prefix.\r\n */\r\nexport const DEFAULT_ADDRESS_PREFIX = 'STM'\r\n\r\ninterface RPCRequest {\r\n    /**\r\n     * Request sequence number.\r\n     */\r\n    id: number | string\r\n    /**\r\n     * RPC method.\r\n     */\r\n    method: 'call' | 'notice' | 'callback'\r\n    /**\r\n     * Array of parameters to pass to the method.\r\n     */\r\n    jsonrpc: '2.0'\r\n    params: any[]\r\n}\r\n\r\ninterface RPCCall extends RPCRequest {\r\n    method: 'call'\r\n    /**\r\n     * 1. API to call, you can pass either the numerical id of the API you get\r\n     *    from calling 'get_api_by_name' or the name directly as a string.\r\n     * 2. Method to call on that API.\r\n     * 3. Arguments to pass to the method.\r\n     */\r\n    params: [number|string, string, any[]]\r\n}\r\n\r\ninterface RPCError {\r\n    code: number\r\n    message: string\r\n    data?: any\r\n}\r\n\r\ninterface RPCResponse {\r\n    /**\r\n     * Response sequence number, corresponding to request sequence number.\r\n     */\r\n    id: number\r\n    error?: RPCError\r\n    result?: any\r\n}\r\n\r\n/**\r\n * RPC Client options\r\n * ------------------\r\n */\r\nexport interface ClientOptions {\r\n    /**\r\n     * Steem chain id. Defaults to main steem network:\r\n     * `0000000000000000000000000000000000000000000000000000000000000000`\r\n     */\r\n    chainId?: string\r\n    /**\r\n     * Steem address prefix. Defaults to main steem network:\r\n     * `STM`\r\n     */\r\n    addressPrefix?: string\r\n    /**\r\n     * Send timeout, how long to wait in milliseconds before giving\r\n     * up on a rpc call. Note that this is not an exact timeout,\r\n     * no in-flight requests will be aborted, they will just not\r\n     * be retried any more past the timeout.\r\n     * Can be set to 0 to retry forever. Defaults to 60 * 1000 ms.\r\n     */\r\n    timeout?: number\r\n    /**\r\n     * Retry backoff function, returns milliseconds. Defaults to `min(tries² × 100, 10000)`.\r\n     */\r\n    backoff?: (tries: number) => number\r\n    /**\r\n     * Node.js http(s) agent, use if you want http keep-alive.\r\n     * Defaults to using https.globalAgent.\r\n     * @see https://nodejs.org/api/http.html#http_new_agent_options.\r\n     */\r\n    agent?: any // https.Agent\r\n}\r\n\r\n/**\r\n * RPC Client\r\n * ----------\r\n * Can be used in both node.js and the browser. Also see {@link ClientOptions}.\r\n */\r\nexport class Client {\r\n\r\n    /**\r\n     * Create a new client instance configured for the testnet.\r\n     */\r\n    public static testnet(options?: ClientOptions) {\r\n        let opts: ClientOptions = {}\r\n        if (options) {\r\n            opts = copy(options)\r\n            opts.agent = options.agent\r\n        }\r\n\r\n        opts.addressPrefix = 'STX'\r\n        opts.chainId = '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673'\r\n        return new Client('https://testnet.steem.vc', opts)\r\n    }\r\n\r\n    /**\r\n     * Client options, *read-only*.\r\n     */\r\n    public readonly options: ClientOptions\r\n\r\n    /**\r\n     * Address to Steem RPC server, *read-only*.\r\n     */\r\n    public readonly address: string\r\n\r\n    /**\r\n     * Database API helper.\r\n     */\r\n    public readonly database: DatabaseAPI\r\n\r\n    /**\r\n     * RC API helper.\r\n     */\r\n    public readonly rc: RCAPI\r\n\r\n    /**\r\n     * Broadcast API helper.\r\n     */\r\n    public readonly broadcast: BroadcastAPI\r\n\r\n    /**\r\n     * Blockchain helper.\r\n     */\r\n    public readonly blockchain: Blockchain\r\n\r\n    /**\r\n     * Chain ID for current network.\r\n     */\r\n    public readonly chainId: Buffer\r\n\r\n    /**\r\n     * Address prefix for current network.\r\n     */\r\n    public readonly addressPrefix: string\r\n\r\n    private timeout: number\r\n    private backoff: typeof defaultBackoff\r\n\r\n    /**\r\n     * @param address The address to the Steem RPC server, e.g. `https://api.steemit.com`.\r\n     * @param options Client options.\r\n     */\r\n    constructor(address: string, options: ClientOptions = {}) {\r\n        this.address = address\r\n        this.options = options\r\n\r\n        this.chainId = options.chainId ? Buffer.from(options.chainId, 'hex') : DEFAULT_CHAIN_ID\r\n        assert.equal(this.chainId.length, 32, 'invalid chain id')\r\n        this.addressPrefix = options.addressPrefix || DEFAULT_ADDRESS_PREFIX\r\n\r\n        this.timeout = options.timeout || 60 * 1000\r\n        this.backoff = options.backoff || defaultBackoff\r\n\r\n        this.database = new DatabaseAPI(this)\r\n        this.broadcast = new BroadcastAPI(this)\r\n        this.blockchain = new Blockchain(this)\r\n        this.rc = new RCAPI(this)\r\n    }\r\n\r\n    /**\r\n     * Make a RPC call to the server.\r\n     *\r\n     * @param api     The API to call, e.g. `database_api`.\r\n     * @param method  The API method, e.g. `get_dynamic_global_properties`.\r\n     * @param params  Array of parameters to pass to the method, optional.\r\n     *\r\n     */\r\n    public async call(api: string, method: string, params: any = []): Promise<any> {\r\n        const request: RPCCall = {\r\n            id: '0',\r\n            jsonrpc: '2.0',\r\n            method: 'call',\r\n            params: [api, method, params]\r\n        }\r\n        const body = JSON.stringify(request, (key, value) => {\r\n            // encode Buffers as hex strings instead of an array of bytes\r\n            if (typeof value === 'object' && value.type === 'Buffer') {\r\n                return Buffer.from(value.data).toString('hex')\r\n            }\r\n            return value\r\n        })\r\n        const opts: any = {\r\n            body,\r\n            cache: 'no-cache',\r\n            headers: {'User-Agent': `dsteem/${ packageVersion }`},\r\n            method: 'POST',\r\n            mode: 'cors'\r\n        }\r\n        if (this.options.agent) {\r\n            opts.agent = this.options.agent\r\n        }\r\n        let fetchTimeout: any\r\n        if (api !== 'network_broadcast_api' && method.substring(0, 21) !== 'broadcast_transaction') {\r\n            // bit of a hack to work around some nodes high error rates\r\n            // only effective in node.js (until timeout spec lands in browsers)\r\n            fetchTimeout = (tries: number) => (tries + 1) * 500\r\n        }\r\n        const response = await retryingFetch(\r\n            this.address, opts, this.timeout, this.backoff, fetchTimeout\r\n        ) as RPCResponse\r\n        // resolve FC error messages into something more readable\r\n        if (response.error) {\r\n            const formatValue = (value: any) => {\r\n                switch (typeof value) {\r\n                    case 'object':\r\n                        return JSON.stringify(value)\r\n                    default:\r\n                        return String(value)\r\n                }\r\n            }\r\n            const {data} = response.error\r\n            let {message} = response.error\r\n            if (data && data.stack && data.stack.length > 0) {\r\n                const top = data.stack[0]\r\n                const topData = copy(top.data)\r\n                message = top.format.replace(/\\$\\{([a-z_]+)\\}/gi, (match: string, key: string) => {\r\n                    let rv = match\r\n                    if (topData[key]) {\r\n                        rv = formatValue(topData[key])\r\n                        delete topData[key]\r\n                    }\r\n                    return rv\r\n                })\r\n                const unformattedData = Object.keys(topData)\r\n                    .map((key) => ({key, value: formatValue(topData[key])}))\r\n                    .map((item) => `${ item.key }=${ item.value}`)\r\n                if (unformattedData.length > 0) {\r\n                    message += ' ' + unformattedData.join(' ')\r\n                }\r\n            }\r\n            throw new VError({info: data, name: 'RPCError'}, message)\r\n        }\r\n        assert.equal(response.id, request.id, 'got invalid response id')\r\n        return response.result\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Default backoff function.\r\n * ```min(tries*10^2, 10 seconds)```\r\n */\r\nconst defaultBackoff = (tries: number): number => {\r\n    return Math.min(Math.pow(tries * 10, 2), 10 * 1000)\r\n}\r\n","// `__PACKAGE_VERSION__` is replaced at build time by tsup (see tsup.config.ts\n// `define`). For ts-node / dev-mode where the define isn't applied, fall back\n// to reading package.json directly — Client and tests don't depend on the\n// exact value, only the User-Agent header reflects it.\ndeclare const __PACKAGE_VERSION__: string\n\nlet version: string\ntry {\n    version = __PACKAGE_VERSION__\n} catch {\n     \n    version = require('./../package.json').version\n}\n\nexport default version\n","/**\r\n * @file Steem blockchain helpers.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport {Client} from './../client'\r\nimport {iteratorStream, sleep} from './../utils'\r\n\r\nexport enum BlockchainMode {\r\n    /**\r\n     * Only get irreversible blocks.\r\n     */\r\n    Irreversible,\r\n    /**\r\n     * Get all blocks.\r\n     */\r\n    Latest,\r\n}\r\n\r\nexport interface BlockchainStreamOptions {\r\n    /**\r\n     * Start block number, inclusive. If omitted generation will start from current block height.\r\n     */\r\n    from?: number\r\n    /**\r\n     * End block number, inclusive. If omitted stream will continue indefinitely.\r\n     */\r\n    to?: number\r\n    /**\r\n     * Streaming mode, if set to `Latest` may include blocks that are not applied to the final chain.\r\n     * Defaults to `Irreversible`.\r\n     */\r\n    mode?: BlockchainMode\r\n}\r\n\r\nexport class Blockchain {\r\n\r\n    constructor(readonly client: Client) {}\r\n\r\n    /**\r\n     * Get latest block number.\r\n     */\r\n    public async getCurrentBlockNum(mode = BlockchainMode.Irreversible) {\r\n        const props = await this.client.database.getDynamicGlobalProperties()\r\n        switch (mode) {\r\n            case BlockchainMode.Irreversible:\r\n                return props.last_irreversible_block_num\r\n            case BlockchainMode.Latest:\r\n                return props.head_block_number\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get latest block header.\r\n     */\r\n    public async getCurrentBlockHeader(mode?: BlockchainMode) {\r\n        return this.client.database.getBlockHeader(await this.getCurrentBlockNum(mode))\r\n    }\r\n\r\n    /**\r\n     * Get latest block.\r\n     */\r\n    public async getCurrentBlock(mode?: BlockchainMode) {\r\n        return this.client.database.getBlock(await this.getCurrentBlockNum(mode))\r\n    }\r\n\r\n    /**\r\n     * Return a asynchronous block number iterator.\r\n     * @param options Feed options, can also be a block number to start from.\r\n     */\r\n    public async *getBlockNumbers(options?: BlockchainStreamOptions|number) {\r\n        // const config = await this.client.database.getConfig()\r\n        // const interval = config['STEEMIT_BLOCK_INTERVAL'] as number\r\n        const interval = 3\r\n        if (!options) {\r\n            options = {}\r\n        } else if (typeof options === 'number') {\r\n            options = {from: options}\r\n        }\r\n        let current = await this.getCurrentBlockNum(options.mode)\r\n        if (options.from !== undefined && options.from > current) {\r\n            throw new Error(`From can't be larger than current block num (${ current })`)\r\n        }\r\n        let seen = options.from !== undefined ? options.from : current\r\n        while (true) {\r\n            while (current > seen) {\r\n                yield seen++\r\n                if (options.to !== undefined && seen > options.to) {\r\n                    return\r\n                }\r\n            }\r\n            await sleep(interval * 1000)\r\n            current = await this.getCurrentBlockNum(options.mode)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return a stream of block numbers, accepts same parameters as {@link getBlockNumbers}.\r\n     */\r\n    public getBlockNumberStream(options?: BlockchainStreamOptions|number) {\r\n        return iteratorStream(this.getBlockNumbers(options))\r\n    }\r\n\r\n    /**\r\n     * Return a asynchronous block iterator, accepts same parameters as {@link getBlockNumbers}.\r\n     */\r\n    public async *getBlocks(options?: BlockchainStreamOptions|number) {\r\n        for await (const num of this.getBlockNumbers(options)) {\r\n            yield await this.client.database.getBlock(num)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return a stream of blocks, accepts same parameters as {@link getBlockNumbers}.\r\n     */\r\n    public getBlockStream(options?: BlockchainStreamOptions|number) {\r\n        return iteratorStream(this.getBlocks(options))\r\n    }\r\n\r\n    /**\r\n     * Return a asynchronous operation iterator, accepts same parameters as {@link getBlockNumbers}.\r\n     */\r\n    public async *getOperations(options?: BlockchainStreamOptions|number) {\r\n        for await (const num of this.getBlockNumbers(options)) {\r\n            const operations = await this.client.database.getOperations(num)\r\n            for (const operation of operations) {\r\n                yield operation\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return a stream of operations, accepts same parameters as {@link getBlockNumbers}.\r\n     */\r\n    public getOperationsStream(options?: BlockchainStreamOptions|number) {\r\n        return iteratorStream(this.getOperations(options))\r\n    }\r\n\r\n}\r\n","/**\r\n * @file Steem account type definitions.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport {PublicKey} from './../crypto'\r\nimport {Asset} from './asset'\r\n\r\nexport interface AuthorityType {\r\n    weight_threshold: number // uint32_t\r\n    account_auths: Array<[string, number]> // flat_map< account_name_type, uint16_t >\r\n    key_auths: Array<[string | PublicKey, number]>// flat_map< public_key_type, uint16_t >\r\n}\r\n\r\nexport class Authority implements AuthorityType {\r\n\r\n    /**\r\n     * Convenience to create a new instance from PublicKey or authority object.\r\n     */\r\n    public static from(value: string | PublicKey | AuthorityType) {\r\n        if (value instanceof Authority) {\r\n            return value\r\n        } else if (typeof value === 'string' || value instanceof PublicKey) {\r\n            return new Authority({\r\n                account_auths: [],\r\n                key_auths: [[value, 1]],\r\n                weight_threshold: 1\r\n            })\r\n        } else {\r\n            return new Authority(value)\r\n        }\r\n    }\r\n\r\n    public weight_threshold: number\r\n    public account_auths: Array<[string, number]>\r\n    public key_auths: Array<[string | PublicKey, number]>\r\n\r\n    constructor({weight_threshold, account_auths, key_auths}: AuthorityType) {\r\n        this.weight_threshold = weight_threshold\r\n        this.account_auths = account_auths\r\n        this.key_auths = key_auths\r\n    }\r\n}\r\n\r\nexport interface Account {\r\n    id: number // account_id_type\r\n    name: string // account_name_type\r\n    owner: Authority\r\n    active: Authority\r\n    posting: Authority\r\n    memo_key: string // public_key_type\r\n    json_metadata: string\r\n    proxy: string // account_name_type\r\n    last_owner_update: string // time_point_sec\r\n    last_account_update: string // time_point_sec\r\n    created: string // time_point_sec\r\n    mined: boolean\r\n    owner_challenged: boolean\r\n    active_challenged: boolean\r\n    last_owner_proved: string // time_point_sec\r\n    last_active_proved: string // time_point_sec\r\n    recovery_account: string // account_name_type\r\n    reset_account: string // account_name_type\r\n    last_account_recovery: string // time_point_sec\r\n    comment_count: number // uint32_t\r\n    lifetime_vote_count: number // uint32_t\r\n    post_count: number // uint32_t\r\n    can_vote: boolean\r\n    voting_power: number // uint16_t\r\n    last_vote_time: string // time_point_sec\r\n    voting_manabar: {\r\n        current_mana: string | number,\r\n        last_update_time: number\r\n    },\r\n    balance: string | Asset\r\n    savings_balance: string | Asset\r\n    sbd_balance: string | Asset\r\n    sbd_seconds: string // uint128_t\r\n    sbd_seconds_last_update: string // time_point_sec\r\n    sbd_last_interest_payment: string // time_point_sec\r\n    savings_sbd_balance: string | Asset // asset\r\n    savings_sbd_seconds: string // uint128_t\r\n    savings_sbd_seconds_last_update: string // time_point_sec\r\n    savings_sbd_last_interest_payment: string // time_point_sec\r\n    savings_withdraw_requests: number // uint8_t\r\n    reward_sbd_balance: string | Asset\r\n    reward_steem_balance: string | Asset\r\n    reward_vesting_balance: string | Asset\r\n    reward_vesting_steem: string | Asset\r\n    curation_rewards: number | string // share_type\r\n    posting_rewards: number | string // share_type\r\n    vesting_shares: string | Asset\r\n    delegated_vesting_shares: string | Asset\r\n    received_vesting_shares: string | Asset\r\n    vesting_withdraw_rate: string | Asset\r\n    next_vesting_withdrawal: string // time_point_sec\r\n    withdrawn: number | string // share_type\r\n    to_withdraw: number | string // share_type\r\n    withdraw_routes: number // uint16_t\r\n    proxied_vsf_votes: number[] // vector< share_type >\r\n    witnesses_voted_for: number // uint16_t\r\n    average_bandwidth: number | string // share_type\r\n    lifetime_bandwidth: number | string // share_type\r\n    last_bandwidth_update: string // time_point_sec\r\n    average_market_bandwidth: number | string // share_type\r\n    lifetime_market_bandwidth: number | string // share_type\r\n    last_market_bandwidth_update: string // time_point_sec\r\n    last_post: string // time_point_sec\r\n    last_root_post: string // time_point_sec\r\n}\r\n\r\nexport interface ExtendedAccount extends Account {\r\n    /**\r\n     * Convert vesting_shares to vesting steem.\r\n     */\r\n    vesting_balance: string | Asset\r\n    reputation: string | number // share_type\r\n    /**\r\n     * Transfer to/from vesting.\r\n     */\r\n    transfer_history: any[] // map<uint64_t,applied_operation>\r\n    /**\r\n     * Limit order / cancel / fill.\r\n     */\r\n    market_history: any[] // map<uint64_t,applied_operation>\r\n    post_history: any[] // map<uint64_t,applied_operation>\r\n    vote_history: any[] // map<uint64_t,applied_operation>\r\n    other_history: any[] // map<uint64_t,applied_operation>\r\n    witness_votes: string[] // set<string>\r\n    tags_usage: string[] // vector<pair<string,uint32_t>>\r\n    guest_bloggers: string[] // vector<pair<account_name_type,uint32_t>>\r\n    open_orders?: any[] // optional<map<uint32_t,extended_limit_order>>\r\n    comments?: any[] /// permlinks for this user // optional<vector<string>>\r\n    blog?: any[] /// blog posts for this user // optional<vector<string>>\r\n    feed?: any[] /// feed posts for this user // optional<vector<string>>\r\n    recent_replies?: any[] /// blog posts for this user // optional<vector<string>>\r\n    recommended?: any[] /// posts recommened for this user // optional<vector<string>>\r\n}\r\n","/**\r\n * @file Steem asset type definitions and helpers.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport assert from 'assert'\r\n\r\nexport interface SMTAsset {\r\n    amount: string|number,\r\n    precision: number,\r\n    nai: string\r\n}\r\n\r\n/**\r\n * Asset symbol string.\r\n */\r\nexport type AssetSymbol = 'STEEM' | 'VESTS' | 'SBD' | 'TESTS' | 'TBD'\r\n\r\n/**\r\n * Class representing a steem asset, e.g. `1.000 STEEM` or `12.112233 VESTS`.\r\n */\r\nexport class Asset {\r\n\r\n    /**\r\n     * Create a new Asset instance from a string, e.g. `42.000 STEEM`.\r\n     */\r\n    public static fromString(string: string, expectedSymbol?: AssetSymbol) {\r\n        const [amountString, symbol] = string.split(' ')\r\n        if (['STEEM', 'VESTS', 'SBD', 'TESTS', 'TBD'].indexOf(symbol) === -1) {\r\n            throw new Error(`Invalid asset symbol: ${ symbol }`)\r\n        }\r\n        if (expectedSymbol && symbol !== expectedSymbol) {\r\n            throw new Error(`Invalid asset, expected symbol: ${ expectedSymbol } got: ${ symbol }`)\r\n        }\r\n        const amount = Number.parseFloat(amountString)\r\n        if (!Number.isFinite(amount)) {\r\n            throw new Error(`Invalid asset amount: ${ amountString }`)\r\n        }\r\n        return new Asset(amount, symbol as AssetSymbol)\r\n    }\r\n\r\n    /**\r\n     * Convenience to create new Asset.\r\n     * @param symbol Symbol to use when created from number. Will also be used to validate\r\n     *               the asset, throws if the passed value has a different symbol than this.\r\n     */\r\n    public static from(value: string | Asset | number, symbol?: AssetSymbol) {\r\n        if (value instanceof Asset) {\r\n            if (symbol && value.symbol !== symbol) {\r\n                throw new Error(`Invalid asset, expected symbol: ${ symbol } got: ${ value.symbol }`)\r\n            }\r\n            return value\r\n        } else if (typeof value === 'number' && Number.isFinite(value)) {\r\n            return new Asset(value, symbol || 'STEEM')\r\n        } else if (typeof value === 'string') {\r\n            return Asset.fromString(value, symbol)\r\n        } else {\r\n            throw new Error(`Invalid asset '${ String(value) }'`)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the smaller of the two assets.\r\n     */\r\n    public static min(a: Asset, b: Asset) {\r\n        assert(a.symbol === b.symbol, 'can not compare assets with different symbols')\r\n        return a.amount < b.amount ? a : b\r\n    }\r\n\r\n    /**\r\n     * Return the larger of the two assets.\r\n     */\r\n    public static max(a: Asset, b: Asset) {\r\n        assert(a.symbol === b.symbol, 'can not compare assets with different symbols')\r\n        return a.amount > b.amount ? a : b\r\n    }\r\n\r\n    constructor(public readonly amount: number, public readonly symbol: AssetSymbol) {}\r\n\r\n    /**\r\n     * Return asset precision.\r\n     */\r\n    public getPrecision(): number {\r\n        switch (this.symbol) {\r\n            case 'TESTS':\r\n            case 'TBD':\r\n            case 'STEEM':\r\n            case 'SBD':\r\n                return 3\r\n            case 'VESTS':\r\n                return 6\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return a string representation of this asset, e.g. `42.000 STEEM`.\r\n     */\r\n    public toString(): string {\r\n        return `${ this.amount.toFixed(this.getPrecision()) } ${ this.symbol }`\r\n    }\r\n\r\n    /**\r\n     * Return a new Asset instance with amount added.\r\n     */\r\n    public add(amount: Asset | string | number): Asset {\r\n        const other = Asset.from(amount, this.symbol)\r\n        assert(this.symbol === other.symbol, 'can not add with different symbols')\r\n        return new Asset(this.amount + other.amount, this.symbol)\r\n    }\r\n\r\n    /**\r\n     * Return a new Asset instance with amount subtracted.\r\n     */\r\n    public subtract(amount: Asset | string | number): Asset {\r\n        const other = Asset.from(amount, this.symbol)\r\n        assert(this.symbol === other.symbol, 'can not subtract with different symbols')\r\n        return new Asset(this.amount - other.amount, this.symbol)\r\n    }\r\n\r\n    /**\r\n     * Return a new Asset with the amount multiplied by factor.\r\n     */\r\n    public multiply(factor: Asset | string | number): Asset {\r\n        const other = Asset.from(factor, this.symbol)\r\n        assert(this.symbol === other.symbol, 'can not multiply with different symbols')\r\n        return new Asset(this.amount * other.amount, this.symbol)\r\n    }\r\n\r\n    /**\r\n     * Return a new Asset with the amount divided.\r\n     */\r\n    public divide(divisor: Asset | string | number): Asset {\r\n        const other = Asset.from(divisor, this.symbol)\r\n        assert(this.symbol === other.symbol, 'can not divide with different symbols')\r\n        return new Asset(this.amount / other.amount, this.symbol)\r\n    }\r\n\r\n    /**\r\n     * For JSON serialization, same as toString().\r\n     */\r\n    public toJSON(): string {\r\n        return this.toString()\r\n    }\r\n\r\n}\r\n\r\nexport type PriceType = Price | {base: Asset | string, quote: Asset | string}\r\n\r\n/**\r\n * Represents quotation of the relative value of asset against another asset.\r\n * Similar to 'currency pair' used to determine value of currencies.\r\n *\r\n *  For example:\r\n *  1 EUR / 1.25 USD where:\r\n *  1 EUR is an asset specified as a base\r\n *  1.25 USD us an asset specified as a qute\r\n *\r\n *  can determine value of EUR against USD.\r\n */\r\nexport class Price {\r\n\r\n    /**\r\n     * Convenience to create new Price.\r\n     */\r\n    public static from(value: PriceType) {\r\n        if (value instanceof Price) {\r\n            return value\r\n        } else {\r\n            return new Price(Asset.from(value.base), Asset.from(value.quote))\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param base  - represents a value of the price object to be expressed relatively to quote\r\n     *                asset. Cannot have amount == 0 if you want to build valid price.\r\n     * @param quote - represents an relative asset. Cannot have amount == 0, otherwise\r\n     *                asertion fail.\r\n     *\r\n     * Both base and quote shall have different symbol defined.\r\n     */\r\n    constructor(public readonly base: Asset, public readonly quote: Asset) {\r\n        assert(base.amount !== 0 && quote.amount !== 0, 'base and quote assets must be non-zero')\r\n        assert(base.symbol !== quote.symbol, 'base and quote can not have the same symbol')\r\n    }\r\n\r\n    /**\r\n     * Return a string representation of this price pair.\r\n     */\r\n    public toString() {\r\n        return `${ this.base }:${ this.quote }`\r\n    }\r\n\r\n    /**\r\n     * Return a new Asset with the price converted between the symbols in the pair.\r\n     * Throws if passed asset symbol is not base or quote.\r\n     */\r\n    public convert(asset: Asset) {\r\n        if (asset.symbol === this.base.symbol) {\r\n            assert(this.base.amount > 0)\r\n            return new Asset(asset.amount * this.quote.amount / this.base.amount, this.quote.symbol)\r\n        } else if (asset.symbol === this.quote.symbol) {\r\n            assert(this.quote.amount > 0)\r\n            return new Asset(asset.amount * this.base.amount / this.quote.amount, this.base.symbol)\r\n        } else {\r\n            throw new Error(`Can not convert ${ asset } with ${ this }`)\r\n        }\r\n    }\r\n\r\n}\r\n","/**\r\n * @file Broadcast API helpers.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport assert from 'assert'\r\n\r\nimport {Client} from './../client'\r\nimport {cryptoUtils, PrivateKey, PublicKey} from './../crypto'\r\nimport {Authority, AuthorityType} from './../steem/account'\r\nimport {Asset} from './../steem/asset'\r\nimport {\r\n    AccountUpdateOperation,\r\n    ClaimAccountOperation,\r\n    CommentOperation,\r\n    CommentOptionsOperation,\r\n    CreateClaimedAccountOperation,\r\n    CustomJsonOperation,\r\n    DelegateVestingSharesOperation,\r\n    Operation,\r\n    TransferOperation,\r\n    VoteOperation\r\n} from './../steem/operation'\r\nimport {SignedTransaction, Transaction, TransactionConfirmation} from './../steem/transaction'\r\n\r\nexport interface CreateAccountOptions {\r\n    /**\r\n     * Username for the new account.\r\n     */\r\n    username: string\r\n    /**\r\n     * Password for the new account, if set, all keys will be derived from this.\r\n     */\r\n    password?: string\r\n    /**\r\n     * Account authorities, used to manually set account keys.\r\n     * Can not be used together with the password option.\r\n     */\r\n    auths?: {\r\n        owner: AuthorityType | string | PublicKey\r\n        active: AuthorityType | string | PublicKey\r\n        posting: AuthorityType | string | PublicKey\r\n        memoKey: PublicKey | string\r\n    }\r\n    /**\r\n     * Creator account, fee will be deducted from this and the key to sign\r\n     * the transaction must be the creators active key.\r\n     */\r\n    creator: string,\r\n    /**\r\n     * Account creation fee. If omitted fee will be set to lowest possible.\r\n     */\r\n    fee?: string | Asset | number\r\n    /**\r\n     * Account delegation, amount of VESTS to delegate to the new account.\r\n     * If omitted the delegation amount will be the lowest possible based\r\n     * on the fee. Can be set to zero to disable delegation.\r\n     */\r\n    delegation?: string | Asset | number\r\n    /**\r\n     * Optional account meta-data.\r\n     */\r\n    metadata?: {[key: string]: any}\r\n}\r\n\r\nexport class BroadcastAPI {\r\n\r\n    /**\r\n     * How many milliseconds in the future to set the expiry time to when\r\n     * broadcasting a transaction, defaults to 1 minute.\r\n     */\r\n    public expireTime = 60 * 1000\r\n\r\n    constructor(readonly client: Client) {}\r\n\r\n    /**\r\n     * Broadcast a comment, also used to create a new top level post.\r\n     * @param comment The comment/post.\r\n     * @param key Private posting key of comment author.\r\n     */\r\n    public async comment(comment: CommentOperation[1], key: PrivateKey) {\r\n        const op: Operation = ['comment', comment]\r\n        return this.sendOperations([op], key)\r\n    }\r\n\r\n    /**\r\n     * Broadcast a comment and set the options.\r\n     * @param comment The comment/post.\r\n     * @param options The comment/post options.\r\n     * @param key Private posting key of comment author.\r\n     */\r\n    public async commentWithOptions(comment: CommentOperation[1],\r\n        options: CommentOptionsOperation[1],\r\n        key: PrivateKey) {\r\n        const ops: Operation[] = [\r\n            ['comment', comment],\r\n            ['comment_options', options]\r\n        ]\r\n        return this.sendOperations(ops, key)\r\n    }\r\n\r\n    /**\r\n     * Broadcast a vote.\r\n     * @param vote The vote to send.\r\n     * @param key Private posting key of the voter.\r\n     */\r\n    public async vote(vote: VoteOperation[1], key: PrivateKey) {\r\n        const op: Operation = ['vote', vote]\r\n        return this.sendOperations([op], key)\r\n    }\r\n\r\n    /**\r\n     * Broadcast a transfer.\r\n     * @param data The transfer operation payload.\r\n     * @param key Private active key of sender.\r\n     */\r\n    public async transfer(data: TransferOperation[1], key: PrivateKey) {\r\n        const op: Operation = ['transfer', data]\r\n        return this.sendOperations([op], key)\r\n    }\r\n\r\n    /**\r\n     * Broadcast custom JSON.\r\n     * @param data The custom_json operation payload.\r\n     * @param key Private posting or active key.\r\n     */\r\n    public async json(data: CustomJsonOperation[1], key: PrivateKey) {\r\n        const op: Operation = ['custom_json', data]\r\n        return this.sendOperations([op], key)\r\n    }\r\n\r\n    /**\r\n     * Create a new account on testnet.\r\n     * @param options New account options.\r\n     * @param key Private active key of account creator.\r\n     */\r\n    public async createTestAccount(options: CreateAccountOptions, key: PrivateKey) {\r\n        assert(global.hasOwnProperty('it'), 'helper to be used only for mocha tests')\r\n\r\n        const {username, metadata, creator} = options\r\n\r\n        const prefix = this.client.addressPrefix\r\n        let owner: Authority, active: Authority, posting: Authority, memo_key: PublicKey\r\n        if (options.password) {\r\n            const ownerKey = PrivateKey.fromLogin(username, options.password, 'owner').createPublic(prefix)\r\n            owner = Authority.from(ownerKey)\r\n            const activeKey = PrivateKey.fromLogin(username, options.password, 'active').createPublic(prefix)\r\n            active = Authority.from(activeKey)\r\n            const postingKey = PrivateKey.fromLogin(username, options.password, 'posting').createPublic(prefix)\r\n            posting = Authority.from(postingKey)\r\n            memo_key = PrivateKey.fromLogin(username, options.password, 'memo').createPublic(prefix)\r\n        } else if (options.auths) {\r\n            owner = Authority.from(options.auths.owner)\r\n            active = Authority.from(options.auths.active)\r\n            posting = Authority.from(options.auths.posting)\r\n            memo_key = PublicKey.from(options.auths.memoKey)\r\n        } else {\r\n            throw new Error('Must specify either password or auths')\r\n        }\r\n\r\n        let {fee, delegation} = options\r\n\r\n        delegation = Asset.from(delegation || 0, 'VESTS')\r\n        fee = Asset.from(fee || 0, 'TESTS')\r\n\r\n        if (fee.amount > 0) {\r\n            const chainProps = await this.client.database.getChainProperties()\r\n            const creationFee = Asset.from(chainProps.account_creation_fee)\r\n            if (fee.amount !== creationFee.amount) {\r\n                throw new Error('Fee must be exactly ' + creationFee.toString())\r\n            }\r\n        }\r\n\r\n        const claim_op: ClaimAccountOperation = [\r\n            'claim_account',\r\n            {\r\n                creator,\r\n                extensions: [],\r\n                fee\r\n            }\r\n        ]\r\n\r\n        const create_op: CreateClaimedAccountOperation = [\r\n            'create_claimed_account',\r\n            {\r\n                active,\r\n                creator,\r\n                extensions: [],\r\n                json_metadata: metadata ? JSON.stringify(metadata) : '',\r\n                memo_key,\r\n                new_account_name: username,\r\n                owner, posting\r\n            }\r\n        ]\r\n\r\n        const ops: any[] = [claim_op, create_op]\r\n\r\n        if (delegation.amount > 0) {\r\n            const delegate_op: DelegateVestingSharesOperation = [\r\n                'delegate_vesting_shares',\r\n                {\r\n                    delegatee: username,\r\n                    delegator: creator,\r\n                    vesting_shares: delegation\r\n                }\r\n            ]\r\n            ops.push(delegate_op)\r\n        }\r\n\r\n        return this.sendOperations(ops, key)\r\n    }\r\n\r\n    /**\r\n     * Update account.\r\n     * @param data The account_update payload.\r\n     * @param key The private key of the account affected, should be the corresponding\r\n     *            key level or higher for updating account authorities.\r\n     */\r\n    public async updateAccount(data: AccountUpdateOperation[1], key: PrivateKey) {\r\n        const op: Operation = ['account_update', data]\r\n        return this.sendOperations([op], key)\r\n    }\r\n\r\n    /**\r\n     * Delegate vesting shares from one account to the other. The vesting shares are still owned\r\n     * by the original account, but content voting rights and bandwidth allocation are transferred\r\n     * to the receiving account. This sets the delegation to `vesting_shares`, increasing it or\r\n     * decreasing it as needed. (i.e. a delegation of 0 removes the delegation)\r\n     *\r\n     * When a delegation is removed the shares are placed in limbo for a week to prevent a satoshi\r\n     * of VESTS from voting on the same content twice.\r\n     *\r\n     * @param options Delegation options.\r\n     * @param key Private active key of the delegator.\r\n     */\r\n    public async delegateVestingShares(options: DelegateVestingSharesOperation[1], key: PrivateKey) {\r\n        const op: Operation = ['delegate_vesting_shares', options]\r\n        return this.sendOperations([op], key)\r\n    }\r\n\r\n    /**\r\n     * Sign and broadcast transaction with operations to the network. Throws if the transaction expires.\r\n     * @param operations List of operations to send.\r\n     * @param key Private key(s) used to sign transaction.\r\n     */\r\n    public async sendOperations(operations: Operation[],\r\n        key: PrivateKey | PrivateKey[]): Promise<TransactionConfirmation> {\r\n        const props = await this.client.database.getDynamicGlobalProperties()\r\n\r\n        const ref_block_num = props.head_block_number & 0xFFFF\r\n        const ref_block_prefix = Buffer.from(props.head_block_id, 'hex').readUInt32LE(4)\r\n        const expiration = new Date(new Date(props.time + 'Z').getTime() + this.expireTime).toISOString().slice(0, -5)\r\n        const extensions: any[] = []\r\n\r\n        const tx: Transaction = {\r\n            expiration,\r\n            extensions,\r\n            operations,\r\n            ref_block_num,\r\n            ref_block_prefix\r\n        }\r\n\r\n        const result = await this.send(this.sign(tx, key))\r\n        assert(result.expired === false, 'transaction expired')\r\n\r\n        return result\r\n    }\r\n\r\n    /**\r\n     * Sign a transaction with key(s).\r\n     */\r\n    public sign(transaction: Transaction, key: PrivateKey | PrivateKey[]): SignedTransaction {\r\n        return cryptoUtils.signTransaction(transaction, key, this.client.chainId)\r\n    }\r\n\r\n    /**\r\n     * Broadcast a signed transaction to the network.\r\n     */\r\n    public async send(transaction: SignedTransaction): Promise<TransactionConfirmation> {\r\n        return this.call('broadcast_transaction_synchronous', [transaction])\r\n    }\r\n\r\n    /**\r\n     * Convenience for calling `condenser_api`.\r\n     */\r\n    public call(method: string, params?: any[]) {\r\n        return this.client.call('condenser_api', method, params)\r\n    }\r\n\r\n}\r\n","/**\r\n * @file Database API helpers.\r\n * @author Johan Nordberg <code@johan-nordberg.com>\r\n * @license\r\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n *  1. Redistribution of source code must retain the above copyright notice, this\r\n *     list of conditions and the following disclaimer.\r\n *\r\n *  2. Redistribution in binary form must reproduce the above copyright notice,\r\n *     this list of conditions and the following disclaimer in the documentation\r\n *     and/or other materials provided with the distribution.\r\n *\r\n *  3. Neither the name of the copyright holder nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this software without\r\n *     specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * You acknowledge that this software is not designed, licensed or intended for use\r\n * in the design, construction, operation or maintenance of any military facility.\r\n */\r\n\r\nimport {Client} from './../client'\r\nimport {ExtendedAccount} from './../steem/account'\r\nimport {Price} from './../steem/asset'\r\nimport {BlockHeader, SignedBlock} from './../steem/block'\r\nimport {Discussion} from './../steem/comment'\r\nimport {DynamicGlobalProperties} from './../steem/misc'\r\nimport {ChainProperties, VestingDelegation} from './../steem/misc'\r\nimport {AppliedOperation} from './../steem/operation'\r\nimport {SignedTransaction, TransactionConfirmation} from './../steem/transaction'\r\n\r\n/**\r\n * Possible categories for `get_discussions_by_*`.\r\n */\r\nexport type DiscussionQueryCategory = 'active' | 'blog' | 'cashout' | 'children' | 'comments' |\r\n                                      'feed' | 'hot' | 'promoted' | 'trending' | 'votes' | 'created'\r\n\r\nexport interface DisqussionQuery {\r\n    /**\r\n     * Name of author or tag to fetch.\r\n     */\r\n    tag: string\r\n    /**\r\n     * Number of results, max 100.\r\n     */\r\n    limit: number\r\n    filter_tags?: string[]\r\n    select_authors?: string[]\r\n    select_tags?: string[]\r\n    /**\r\n     * Number of bytes of post body to fetch, default 0 (all)\r\n     */\r\n    truncate_body?: number\r\n    /**\r\n     * Name of author to start from, used for paging.\r\n     * Should be used in conjunction with `start_permlink`.\r\n     */\r\n    start_author?: string\r\n    /**\r\n     * Permalink of post to start from, used for paging.\r\n     * Should be used in conjunction with `start_author`.\r\n     */\r\n    start_permlink?: string\r\n    parent_author?: string\r\n    parent_permlink?: string\r\n}\r\n\r\nexport class DatabaseAPI {\r\n\r\n    constructor(readonly client: Client) {}\r\n\r\n    /**\r\n     * Convenience for calling `database_api`.\r\n     */\r\n    public call(method: string, params?: any[]) {\r\n        return this.client.call('condenser_api', method, params)\r\n    }\r\n\r\n    /**\r\n     * Return state of server.\r\n     */\r\n    public getDynamicGlobalProperties(): Promise<DynamicGlobalProperties> {\r\n        return this.call('get_dynamic_global_properties')\r\n    }\r\n\r\n    /**\r\n     * Return median chain properties decided by witness.\r\n     */\r\n    public async getChainProperties(): Promise<ChainProperties> {\r\n        return this.call('get_chain_properties')\r\n    }\r\n\r\n    /**\r\n     * Return all of the state required for a particular url path.\r\n     * @param path Path component of url conforming to condenser's scheme\r\n     *             e.g. `@almost-digital` or `trending/travel`\r\n     */\r\n    public async getState(path: string): Promise<any> {\r\n        return this.call('get_state', [path])\r\n    }\r\n\r\n    /**\r\n     * Return median price in SBD for 1 STEEM as reported by the witnesses.\r\n     */\r\n    public async getCurrentMedianHistoryPrice(): Promise<Price> {\r\n        return Price.from(await this.call('get_current_median_history_price'))\r\n    }\r\n\r\n    /**\r\n     * Get list of delegations made by account.\r\n     * @param account Account delegating\r\n     * @param from Delegatee start offset, used for paging.\r\n     * @param limit Number of results, max 1000.\r\n     */\r\n    public async getVestingDelegations(account: string,\r\n        from: string = '',\r\n        limit: number = 1000): Promise<VestingDelegation[]> {\r\n        return this.call('get_vesting_delegations', [account, from, limit])\r\n    }\r\n\r\n    /**\r\n     * Return server config. See:\r\n     * https://github.com/steemit/steem/blob/master/libraries/protocol/include/steemit/protocol/config.hpp\r\n     */\r\n    public getConfig(): Promise<{[name: string]: string|number|boolean}> {\r\n        return this.call('get_config')\r\n    }\r\n\r\n    /**\r\n     * Return header for *blockNum*.\r\n     */\r\n    public getBlockHeader(blockNum: number): Promise<BlockHeader> {\r\n        return this.call('get_block_header', [blockNum])\r\n    }\r\n\r\n    /**\r\n     * Return block *blockNum*.\r\n     */\r\n    public getBlock(blockNum: number): Promise<SignedBlock> {\r\n        return this.call('get_block', [blockNum])\r\n    }\r\n\r\n    /**\r\n     * Return all applied operations in *blockNum*.\r\n     */\r\n    public getOperations(blockNum: number, onlyVirtual: boolean = false): Promise<AppliedOperation[]> {\r\n        return this.call('get_ops_in_block', [blockNum, onlyVirtual])\r\n    }\r\n\r\n    /**\r\n     * Return array of discussions (a.k.a. posts).\r\n     * @param by The type of sorting for the discussions, valid options are:\r\n     *           `active` `blog` `cashout` `children` `comments` `created`\r\n     *           `feed` `hot` `promoted` `trending` `votes`. Note that\r\n     *           for `blog` and `feed` the tag is set to a username.\r\n     */\r\n    public getDiscussions(by: DiscussionQueryCategory, query: DisqussionQuery): Promise<Discussion[]> {\r\n        return this.call(`get_discussions_by_${ by }`, [query])\r\n    }\r\n\r\n    /**\r\n     * Return array of account info objects for the usernames passed.\r\n     * @param usernames The accounts to fetch.\r\n     */\r\n    public getAccounts(usernames: string[]): Promise<ExtendedAccount[]> {\r\n        return this.call('get_accounts', [usernames])\r\n    }\r\n\r\n    /**\r\n     * Convenience to fetch a block and return a specific transaction.\r\n     */\r\n    public async getTransaction(txc: TransactionConfirmation | {block_num: number, id: string}) {\r\n        const block = await this.client.database.getBlock(txc.block_num)\r\n        const idx = block.transaction_ids.indexOf(txc.id)\r\n        if (idx === -1) {\r\n            throw new Error(`Unable to find transaction ${ txc.id } in block ${ txc.block_num }`)\r\n        }\r\n        return block.transactions[idx] as SignedTransaction\r\n    }\r\n\r\n    /**\r\n     * Verify signed transaction.\r\n     */\r\n    public async verifyAuthority(stx: SignedTransaction): Promise<boolean> {\r\n        return this.call('verify_authority', [stx])\r\n    }\r\n\r\n}\r\n","/**\n * @file Misc steem type definitions.\n * @author Johan Nordberg <code@johan-nordberg.com>\n * @license\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n *  1. Redistribution of source code must retain the above copyright notice, this\n *     list of conditions and the following disclaimer.\n *\n *  2. Redistribution in binary form must reproduce the above copyright notice,\n *     this list of conditions and the following disclaimer in the documentation\n *     and/or other materials provided with the distribution.\n *\n *  3. Neither the name of the copyright holder nor the names of its contributors\n *     may be used to endorse or promote products derived from this software without\n *     specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * You acknowledge that this software is not designed, licensed or intended for use\n * in the design, construction, operation or maintenance of any military facility.\n */\nimport { Account } from './account'\nimport {Asset, Price} from './asset'\n\n/**\n * Large number that may be unsafe to represent natively in JavaScript.\n */\nexport type Bignum = string\n\n/**\n * Buffer wrapper that serializes to a hex-encoded string.\n */\nexport class HexBuffer {\n\n    /**\n     * Convenience to create a new HexBuffer, does not copy data if value passed is already a buffer.\n     */\n    public static from(value: Buffer | HexBuffer | number[] | string) {\n        if (value instanceof HexBuffer) {\n            return value\n        } else if (value instanceof Buffer) {\n            return new HexBuffer(value)\n        } else if (typeof value === 'string') {\n            return new HexBuffer(Buffer.from(value, 'hex'))\n        } else {\n            return new HexBuffer(Buffer.from(value))\n        }\n    }\n\n    constructor(public buffer: Buffer) {}\n\n    public toString(encoding: BufferEncoding = 'hex') {\n        return this.buffer.toString(encoding)\n    }\n\n    public toJSON() {\n        return this.toString()\n    }\n\n}\n\n/**\n * Chain roperties that are decided by the witnesses.\n */\nexport interface ChainProperties {\n    /**\n     * This fee, paid in STEEM, is converted into VESTING SHARES for the new account. Accounts\n     * without vesting shares cannot earn usage rations and therefore are powerless. This minimum\n     * fee requires all accounts to have some kind of commitment to the network that includes the\n     * ability to vote and make transactions.\n     *\n     * @remarks This has to be multiplied by `STEEMIT_CREATE_ACCOUNT_WITH_STEEM_MODIFIER`\n     *       (defined as 30 on the main chain) to get the minimum fee needed to create an account.\n     *\n     */\n    account_creation_fee: string | Asset\n    /**\n     * This witnesses vote for the maximum_block_size which is used by the network\n     * to tune rate limiting and capacity.\n     */\n    maximum_block_size: number // uint32_t\n    /**\n     * The SBD interest percentage rate decided by witnesses, expressed 0 to 10000.\n     */\n    sbd_interest_rate: number // uint16_t STEEMIT_100_PERCENT\n}\n\nexport interface VestingDelegation {\n    /**\n     * Delegation id.\n     */\n    id: number // id_type\n    /**\n     * Account that is delegating vests to delegatee.\n     */\n    delegator: string // account_name_type\n    /**\n     * Account that is receiving vests from delegator.\n     */\n    delegatee: string // account_name_type\n    /**\n     * Amount of VESTS delegated.\n     */\n    vesting_shares: Asset | string\n    /**\n     * Earliest date delegation can be removed.\n     */\n    min_delegation_time: string // time_point_sec\n}\n\n/**\n * Node state.\n */\nexport interface DynamicGlobalProperties {\n    id: number\n    /**\n     * Current block height.\n     */\n    head_block_number: number\n    head_block_id: string\n    /**\n     * UTC Server time, e.g. 2020-01-15T00:42:00\n     */\n    time: string\n    /**\n     * Currently elected witness.\n     */\n    current_witness: string\n    /**\n     * The total POW accumulated, aka the sum of num_pow_witness at the time\n     * new POW is added.\n     */\n    total_pow: number\n    /**\n     * The current count of how many pending POW witnesses there are, determines\n     * the difficulty of doing pow.\n     */\n    num_pow_witnesses: number\n    virtual_supply: Asset | string\n    current_supply: Asset | string\n    /**\n     * Total asset held in confidential balances.\n     */\n    confidential_supply: Asset | string\n    current_sbd_supply: Asset | string\n    /**\n     * Total asset held in confidential balances.\n     */\n    confidential_sbd_supply: Asset | string\n    total_vesting_fund_steem: Asset | string\n    total_vesting_shares: Asset | string\n    total_reward_fund_steem: Asset | string\n    /**\n     * The running total of REWARD^2.\n     */\n    total_reward_shares2: string\n    pending_rewarded_vesting_shares: Asset | string\n    pending_rewarded_vesting_steem: Asset | string\n    /**\n     * This property defines the interest rate that SBD deposits receive.\n     */\n    sbd_interest_rate: number\n    sbd_print_rate: number\n    /**\n     *  Average block size is updated every block to be:\n     *\n     *     average_block_size = (99 * average_block_size + new_block_size) / 100\n     *\n     *  This property is used to update the current_reserve_ratio to maintain\n     *  approximately 50% or less utilization of network capacity.\n     */\n    average_block_size: number\n    /**\n     * Maximum block size is decided by the set of active witnesses which change every round.\n     * Each witness posts what they think the maximum size should be as part of their witness\n     * properties, the median size is chosen to be the maximum block size for the round.\n     *\n     * @remarks the minimum value for maximum_block_size is defined by the protocol to prevent the\n     * network from getting stuck by witnesses attempting to set this too low.\n     */\n    maximum_block_size: number\n    /**\n     * The current absolute slot number. Equal to the total\n     * number of slots since genesis. Also equal to the total\n     * number of missed slots plus head_block_number.\n     */\n    current_aslot: number\n    /**\n     * Used to compute witness participation.\n     */\n    recent_slots_filled: Bignum\n    participation_count: number\n    last_irreversible_block_num: number\n    /**\n     * The maximum bandwidth the blockchain can support is:\n     *\n     *    max_bandwidth = maximum_block_size * STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS / STEEMIT_BLOCK_INTERVAL\n     *\n     * The maximum virtual bandwidth is:\n     *\n     *    max_bandwidth * current_reserve_ratio\n     */\n    max_virtual_bandwidth: Bignum\n    /**\n     * Any time average_block_size <= 50% maximum_block_size this value grows by 1 until it\n     * reaches STEEMIT_MAX_RESERVE_RATIO.  Any time average_block_size is greater than\n     * 50% it falls by 1%.  Upward adjustments happen once per round, downward adjustments\n     * happen every block.\n     */\n    current_reserve_ratio: number\n    /**\n     * The number of votes regenerated per day.  Any user voting slower than this rate will be\n     * \"wasting\" voting power through spillover; any user voting faster than this rate will have\n     * their votes reduced.\n     */\n    vote_power_reserve_rate: number\n}\n\n/**\n * Return the vesting share price.\n */\nexport function getVestingSharePrice(props: DynamicGlobalProperties): Price {\n    const totalVestingFund = Asset.from(props.total_vesting_fund_steem)\n    const totalVestingShares = Asset.from(props.total_vesting_shares)\n    if (totalVestingFund.amount === 0 || totalVestingShares.amount === 0) {\n        return new Price(new Asset(1, 'VESTS'), new Asset(1, 'STEEM'))\n    }\n    return new Price(totalVestingShares, totalVestingFund)\n}\n\n/**\n * Returns the vests of specified account. Default: Subtract delegated & add received\n */\nexport function getVests(account: Account, subtract_delegated: boolean = true, add_received: boolean = true) {\n    let vests: Asset = Asset.from(account.vesting_shares)\n    const vests_delegated: Asset = Asset.from(account.delegated_vesting_shares)\n    const vests_received: Asset = Asset.from(account.received_vesting_shares)\n    const withdraw_rate: Asset = Asset.from(account.vesting_withdraw_rate)\n    const already_withdrawn = (Number(account.to_withdraw) - Number(account.withdrawn)) / 1000000\n    const withdraw_vests = Math.min(withdraw_rate.amount, already_withdrawn)\n    vests = vests.subtract(withdraw_vests)\n\n    if (subtract_delegated) {\n        vests = vests.subtract(vests_delegated)\n    }\n    if (add_received) {\n        vests = vests.add(vests_received)\n    }\n\n    return vests.amount\n}\n"," \r\n\r\nimport { Client } from './../client'\r\nimport { Account } from './../steem/account'\r\nimport { getVests } from './../steem/misc'\r\nimport { Manabar, RCAccount, RCParams, RCPool } from './../steem/rc'\r\n\r\nexport class RCAPI {\r\n    constructor(readonly client: Client) { }\r\n\r\n    /**\r\n     * Convenience for calling `rc_api`.\r\n     */\r\n    public call(method: string, params?: any) {\r\n        return this.client.call('rc_api', method, params)\r\n    }\r\n\r\n    /**\r\n     * Returns RC data for array of usernames\r\n     */\r\n    public async findRCAccounts(usernames: string[]): Promise<RCAccount[]> {\r\n        return (await this.call('find_rc_accounts', { accounts: usernames }))['rc_accounts']\r\n    }\r\n\r\n    /**\r\n     * Returns the global resource params\r\n     */\r\n    public async getResourceParams(): Promise<RCParams> {\r\n        return (await this.call('get_resource_params', {}))['resource_params']\r\n    }\r\n\r\n    /**\r\n     * Returns the global resource pool\r\n     */\r\n    public async getResourcePool(): Promise<RCPool> {\r\n        return (await this.call('get_resource_pool', {}))['resource_pool']\r\n    }\r\n\r\n    /**\r\n     * Makes a API call and returns the RC mana-data for a specified username\r\n     */\r\n    public async getRCMana(username: string): Promise<Manabar> {\r\n        const rc_account: RCAccount = (await this.findRCAccounts([username]))[0]\r\n        return this.calculateRCMana(rc_account)\r\n    }\r\n\r\n    /**\r\n     * Makes a API call and returns the VP mana-data for a specified username\r\n     */\r\n    public async getVPMana(username: string): Promise<Manabar> {\r\n        const account: Account = (await this.client.call(`condenser_api`, 'get_accounts', [[username]]))[0]\r\n        return this.calculateVPMana(account)\r\n    }\r\n\r\n    /**\r\n     * Calculates the RC mana-data based on an RCAccount - findRCAccounts()\r\n     */\r\n    public calculateRCMana(rc_account: RCAccount): Manabar {\r\n        return this._calculateManabar(Number(rc_account.max_rc), rc_account.rc_manabar)\r\n    }\r\n\r\n    /**\r\n     * Calculates the RC mana-data based on an Account - getAccounts()\r\n     */\r\n    public calculateVPMana(account: Account): Manabar {\r\n        const max_mana: number = getVests(account) * Math.pow(10, 6)\r\n        return this._calculateManabar(max_mana, account.voting_manabar)\r\n    }\r\n\r\n    /**\r\n     * Internal convenience method to reduce redundant code\r\n     */\r\n    private _calculateManabar(max_mana: number, { current_mana, last_update_time }: { current_mana: number | string; last_update_time: number }): Manabar {\r\n        const delta: number = Date.now() / 1000 - last_update_time\r\n        current_mana = Number(current_mana) + (delta * max_mana / 432000)\r\n        let percentage: number = Math.round(current_mana / max_mana * 10000)\r\n\r\n        if (!isFinite(percentage) || percentage < 0) {\r\n            percentage = 0\r\n        } else if (percentage > 10000) {\r\n            percentage = 10000\r\n        }\r\n\r\n        return { current_mana, max_mana, percentage }\r\n    }\r\n}\r\n","/**\n * @file Steem protocol serialization.\n * @author Johan Nordberg <code@johan-nordberg.com>\n * @license\n * Copyright (c) 2017 Johan Nordberg. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n *  1. Redistribution of source code must retain the above copyright notice, this\n *     list of conditions and the following disclaimer.\n *\n *  2. Redistribution in binary form must reproduce the above copyright notice,\n *     this list of conditions and the following disclaimer in the documentation\n *     and/or other materials provided with the distribution.\n *\n *  3. Neither the name of the copyright holder nor the names of its contributors\n *     may be used to endorse or promote products derived from this software without\n *     specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * You acknowledge that this software is not designed, licensed or intended for use\n * in the design, construction, operation or maintenance of any military facility.\n */\n\nimport ByteBuffer from 'bytebuffer'\nimport {PublicKey} from './../crypto'\nimport {Asset} from './asset'\nimport {HexBuffer} from './misc'\nimport {Operation} from './operation'\n\nexport type Serializer = (buffer: ByteBuffer, data: any) => void\n\nconst VoidSerializer = (_buffer: ByteBuffer) => {\n    throw new Error('Void can not be serialized')\n}\n\nconst StringSerializer = (buffer: ByteBuffer, data: string) => {\n    buffer.writeVString(data)\n}\n\nconst Int8Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeInt8(data)\n}\n\nconst Int16Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeInt16(data)\n}\n\nconst Int32Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeInt32(data)\n}\n\nconst Int64Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeInt64(data)\n}\n\nconst UInt8Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeUint8(data)\n}\n\nconst UInt16Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeUint16(data)\n}\n\nconst UInt32Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeUint32(data)\n}\n\nconst UInt64Serializer = (buffer: ByteBuffer, data: number) => {\n    buffer.writeUint64(data)\n}\n\nconst BooleanSerializer = (buffer: ByteBuffer, data: boolean) => {\n    buffer.writeByte(data ? 1 : 0)\n}\n\nconst StaticVariantSerializer = (itemSerializers: Serializer[]) => {\n    return (buffer: ByteBuffer, data: [number, any]) => {\n        const [id, item] = data\n        buffer.writeVarint32(id)\n        itemSerializers[id](buffer, item)\n    }\n}\n\n/**\n * Serialize asset.\n * @remarks This looses precision for amounts larger than 2^53-1/10^precision.\n *       Should not be a problem in real-word usage.\n */\nconst AssetSerializer = (buffer: ByteBuffer, data: Asset | string | number) => {\n    const asset = Asset.from(data)\n    const precision = asset.getPrecision()\n    buffer.writeInt64(Math.round(asset.amount * Math.pow(10, precision)))\n    buffer.writeUint8(precision)\n    for (let i = 0; i < 7; i++) {\n        buffer.writeUint8(asset.symbol.charCodeAt(i) || 0)\n    }\n}\n\nconst DateSerializer = (buffer: ByteBuffer, data: string) => {\n    buffer.writeUint32(Math.floor(new Date(data + 'Z').getTime() / 1000))\n}\n\nconst PublicKeySerializer = (buffer: ByteBuffer, data: PublicKey | string | null) => {\n    if (data === null || (typeof data === 'string' && data.slice(-39) === '1111111111111111111111111111111114T1Anm')) {\n        buffer.append(Buffer.alloc(33, 0))\n    } else {\n        buffer.append(PublicKey.from(data).key)\n    }\n}\n\nconst BinarySerializer = (size?: number) => {\n    return (buffer: ByteBuffer, data: Buffer | HexBuffer) => {\n        data = HexBuffer.from(data)\n        const len = data.buffer.length\n        if (size) {\n            if (len !== size) {\n                throw new Error(`Unable to serialize binary. Expected ${ size } bytes, got ${ len }`)\n            }\n        } else {\n            buffer.writeVarint32(len)\n        }\n        buffer.append(data.buffer)\n    }\n}\n\nconst VariableBinarySerializer = BinarySerializer()\n\nconst FlatMapSerializer = (keySerializer: Serializer, valueSerializer: Serializer) => {\n    return (buffer: ByteBuffer, data: Array<[any, any]>) => {\n        buffer.writeVarint32(data.length)\n        for (const [key, value] of data) {\n            keySerializer(buffer, key)\n            valueSerializer(buffer, value)\n        }\n    }\n}\n\nconst ArraySerializer = (itemSerializer: Serializer) => {\n    return (buffer: ByteBuffer, data: any[]) => {\n        buffer.writeVarint32(data.length)\n        for (const item of data) {\n            itemSerializer(buffer, item)\n        }\n    }\n}\n\nconst ObjectSerializer = (keySerializers: Array<[string, Serializer]>) => {\n    return (buffer: ByteBuffer, data: {[key: string]: any}) => {\n        for (const [key, serializer] of keySerializers) {\n            try {\n                serializer(buffer, data[key])\n            } catch (error) {\n                error.message = `${ key }: ${ error.message }`\n                throw error\n            }\n        }\n    }\n}\n\nconst OptionalSerializer = (valueSerializer: Serializer) => {\n    return (buffer: ByteBuffer, data: any) => {\n        if (data != null) {\n            buffer.writeByte(1)\n            valueSerializer(buffer, data)\n        } else {\n            buffer.writeByte(0)\n        }\n    }\n}\n\nconst AuthoritySerializer = ObjectSerializer([\n    ['weight_threshold', UInt32Serializer],\n    ['account_auths', FlatMapSerializer(StringSerializer, UInt16Serializer)],\n    ['key_auths', FlatMapSerializer(PublicKeySerializer, UInt16Serializer)]\n])\n\nconst BeneficiarySerializer = ObjectSerializer([\n    ['account', StringSerializer],\n    ['weight', UInt16Serializer]\n])\n\nconst PriceSerializer = ObjectSerializer([\n    ['base', AssetSerializer],\n    ['quote', AssetSerializer]\n])\n\nconst SignedBlockHeaderSerializer = ObjectSerializer([\n    ['previous', BinarySerializer(20)],\n    ['timestamp', DateSerializer],\n    ['witness', StringSerializer],\n    ['transaction_merkle_root', BinarySerializer(20)],\n    ['extensions', ArraySerializer(VoidSerializer)],\n    ['witness_signature', BinarySerializer(65)]\n])\n\nconst ChainPropertiesSerializer = ObjectSerializer([\n    ['account_creation_fee', AssetSerializer],\n    ['maximum_block_size', UInt32Serializer],\n    ['sbd_interest_rate', UInt16Serializer]\n])\n\nconst OperationDataSerializer = (operationId: number, definitions: Array<[string, Serializer]>) => {\n    const objectSerializer = ObjectSerializer(definitions)\n    return (buffer: ByteBuffer, data: {[key: string]: any}) => {\n        buffer.writeVarint32(operationId)\n        objectSerializer(buffer, data)\n    }\n}\n\nconst OperationSerializers: {[name: string]: Serializer} = {}\n\nOperationSerializers.account_create = OperationDataSerializer(9, [\n    ['fee', AssetSerializer],\n    ['creator', StringSerializer],\n    ['new_account_name', StringSerializer],\n    ['owner', AuthoritySerializer],\n    ['active', AuthoritySerializer],\n    ['posting', AuthoritySerializer],\n    ['memo_key', PublicKeySerializer],\n    ['json_metadata', StringSerializer]\n])\n\nOperationSerializers.account_create_with_delegation = OperationDataSerializer(41, [\n    ['fee', AssetSerializer],\n    ['delegation', AssetSerializer],\n    ['creator', StringSerializer],\n    ['new_account_name', StringSerializer],\n    ['owner', AuthoritySerializer],\n    ['active', AuthoritySerializer],\n    ['posting', AuthoritySerializer],\n    ['memo_key', PublicKeySerializer],\n    ['json_metadata', StringSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.account_update = OperationDataSerializer(10, [\n    ['account', StringSerializer],\n    ['owner', OptionalSerializer(AuthoritySerializer)],\n    ['active', OptionalSerializer(AuthoritySerializer)],\n    ['posting', OptionalSerializer(AuthoritySerializer)],\n    ['memo_key', PublicKeySerializer],\n    ['json_metadata', StringSerializer]\n])\n\nOperationSerializers.account_witness_proxy = OperationDataSerializer(13, [\n    ['account', StringSerializer],\n    ['proxy', StringSerializer]\n])\n\nOperationSerializers.account_witness_vote = OperationDataSerializer(12, [\n    ['account', StringSerializer],\n    ['witness', StringSerializer],\n    ['approve', BooleanSerializer]\n])\n\nOperationSerializers.cancel_transfer_from_savings = OperationDataSerializer(34, [\n    ['from', StringSerializer],\n    ['request_id', UInt32Serializer]\n])\n\nOperationSerializers.change_recovery_account = OperationDataSerializer(26, [\n    ['account_to_recover', StringSerializer],\n    ['new_recovery_account', StringSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.claim_account = OperationDataSerializer(22, [\n    ['creator', StringSerializer],\n    ['fee', AssetSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.claim_reward_balance = OperationDataSerializer(39, [\n    ['account', StringSerializer],\n    ['reward_steem', AssetSerializer],\n    ['reward_sbd', AssetSerializer],\n    ['reward_vests', AssetSerializer]\n])\n\nOperationSerializers.comment = OperationDataSerializer(1, [\n    ['parent_author', StringSerializer],\n    ['parent_permlink', StringSerializer],\n    ['author', StringSerializer],\n    ['permlink', StringSerializer],\n    ['title', StringSerializer],\n    ['body', StringSerializer],\n    ['json_metadata', StringSerializer]\n])\n\nOperationSerializers.comment_options = OperationDataSerializer(19, [\n    ['author', StringSerializer],\n    ['permlink', StringSerializer],\n    ['max_accepted_payout', AssetSerializer],\n    ['percent_steem_dollars', UInt16Serializer],\n    ['allow_votes', BooleanSerializer],\n    ['allow_curation_rewards', BooleanSerializer],\n    ['extensions', ArraySerializer(\n        StaticVariantSerializer([ObjectSerializer(\n            [['beneficiaries', ArraySerializer(BeneficiarySerializer)]]\n        )])\n    )]\n])\n\nOperationSerializers.convert = OperationDataSerializer(8, [\n    ['owner', StringSerializer],\n    ['requestid', UInt32Serializer],\n    ['amount', AssetSerializer]\n])\n\nOperationSerializers.create_claimed_account = OperationDataSerializer(23, [\n    ['creator', StringSerializer],\n    ['new_account_name', StringSerializer],\n    ['owner', AuthoritySerializer],\n    ['active', AuthoritySerializer],\n    ['posting', AuthoritySerializer],\n    ['memo_key', PublicKeySerializer],\n    ['json_metadata', StringSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.custom = OperationDataSerializer(15, [\n    ['required_auths', ArraySerializer(StringSerializer)],\n    ['id', UInt16Serializer],\n    ['data', VariableBinarySerializer]\n])\n\nOperationSerializers.custom_binary = OperationDataSerializer(35, [\n    ['required_owner_auths', ArraySerializer(StringSerializer)],\n    ['required_active_auths', ArraySerializer(StringSerializer)],\n    ['required_posting_auths', ArraySerializer(StringSerializer)],\n    ['required_auths', ArraySerializer(AuthoritySerializer)],\n    ['id', StringSerializer],\n    ['data', VariableBinarySerializer]\n])\n\nOperationSerializers.custom_json = OperationDataSerializer(18, [\n    ['required_auths', ArraySerializer(StringSerializer)],\n    ['required_posting_auths', ArraySerializer(StringSerializer)],\n    ['id', StringSerializer],\n    ['json', StringSerializer]\n])\n\nOperationSerializers.decline_voting_rights = OperationDataSerializer(36, [\n    ['account', StringSerializer],\n    ['decline', BooleanSerializer]\n])\n\nOperationSerializers.delegate_vesting_shares = OperationDataSerializer(40, [\n    ['delegator', StringSerializer],\n    ['delegatee', StringSerializer],\n    ['vesting_shares', AssetSerializer]\n])\n\nOperationSerializers.delete_comment = OperationDataSerializer(17, [\n    ['author', StringSerializer],\n    ['permlink', StringSerializer]\n])\n\nOperationSerializers.escrow_approve = OperationDataSerializer(31, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['agent', StringSerializer],\n    ['who', StringSerializer],\n    ['escrow_id', UInt32Serializer],\n    ['approve', BooleanSerializer]\n])\n\nOperationSerializers.escrow_dispute = OperationDataSerializer(28, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['agent', StringSerializer],\n    ['who', StringSerializer],\n    ['escrow_id', UInt32Serializer]\n])\n\nOperationSerializers.escrow_release = OperationDataSerializer(29, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['agent', StringSerializer],\n    ['who', StringSerializer],\n    ['receiver', StringSerializer],\n    ['escrow_id', UInt32Serializer],\n    ['sbd_amount', AssetSerializer],\n    ['steem_amount', AssetSerializer]\n])\n\nOperationSerializers.escrow_transfer = OperationDataSerializer(27, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['agent', StringSerializer],\n    ['escrow_id', UInt32Serializer],\n    ['sbd_amount', AssetSerializer],\n    ['steem_amount', AssetSerializer],\n    ['fee', AssetSerializer],\n    ['ratification_deadline', DateSerializer],\n    ['escrow_expiration', DateSerializer],\n    ['json_meta', StringSerializer]\n])\n\nOperationSerializers.feed_publish = OperationDataSerializer(7, [\n    ['publisher', StringSerializer],\n    ['exchange_rate', PriceSerializer]\n])\n\nOperationSerializers.limit_order_cancel = OperationDataSerializer(6, [\n    ['owner', StringSerializer],\n    ['orderid', UInt32Serializer]\n])\n\nOperationSerializers.limit_order_create = OperationDataSerializer(5, [\n    ['owner', StringSerializer],\n    ['orderid', UInt32Serializer],\n    ['amount_to_sell', AssetSerializer],\n    ['min_to_receive', AssetSerializer],\n    ['fill_or_kill', BooleanSerializer],\n    ['expiration', DateSerializer]\n])\n\nOperationSerializers.limit_order_create2 = OperationDataSerializer(21, [\n    ['owner', StringSerializer],\n    ['orderid', UInt32Serializer],\n    ['amount_to_sell', AssetSerializer],\n    ['fill_or_kill', BooleanSerializer],\n    ['exchange_rate', PriceSerializer],\n    ['expiration', DateSerializer]\n])\n\nOperationSerializers.recover_account = OperationDataSerializer(25, [\n    ['account_to_recover', StringSerializer],\n    ['new_owner_authority', AuthoritySerializer],\n    ['recent_owner_authority', AuthoritySerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.report_over_production = OperationDataSerializer(16, [\n    ['reporter', StringSerializer],\n    ['first_block', SignedBlockHeaderSerializer],\n    ['second_block', SignedBlockHeaderSerializer]\n])\n\nOperationSerializers.request_account_recovery = OperationDataSerializer(24, [\n    ['recovery_account', StringSerializer],\n    ['account_to_recover', StringSerializer],\n    ['new_owner_authority', AuthoritySerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.reset_account = OperationDataSerializer(37, [\n    ['reset_account', StringSerializer],\n    ['account_to_reset', StringSerializer],\n    ['new_owner_authority', AuthoritySerializer]\n])\n\nOperationSerializers.set_reset_account = OperationDataSerializer(38, [\n    ['account', StringSerializer],\n    ['current_reset_account', StringSerializer],\n    ['reset_account', StringSerializer]\n])\n\nOperationSerializers.set_withdraw_vesting_route = OperationDataSerializer(20, [\n    ['from_account', StringSerializer],\n    ['to_account', StringSerializer],\n    ['percent', UInt16Serializer],\n    ['auto_vest', BooleanSerializer]\n])\n\nOperationSerializers.transfer = OperationDataSerializer(2, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['amount', AssetSerializer],\n    ['memo', StringSerializer]\n])\n\nOperationSerializers.transfer_from_savings = OperationDataSerializer(33, [\n    ['from', StringSerializer],\n    ['request_id', UInt32Serializer],\n    ['to', StringSerializer],\n    ['amount', AssetSerializer],\n    ['memo', StringSerializer]\n])\n\nOperationSerializers.transfer_to_savings = OperationDataSerializer(32, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['amount', AssetSerializer],\n    ['memo', StringSerializer]\n])\n\nOperationSerializers.transfer_to_vesting = OperationDataSerializer(3, [\n    ['from', StringSerializer],\n    ['to', StringSerializer],\n    ['amount', AssetSerializer]\n])\n\nOperationSerializers.vote = OperationDataSerializer(0, [\n    ['voter', StringSerializer],\n    ['author', StringSerializer],\n    ['permlink', StringSerializer],\n    ['weight', Int16Serializer]\n])\n\nOperationSerializers.withdraw_vesting = OperationDataSerializer(4, [\n    ['account', StringSerializer],\n    ['vesting_shares', AssetSerializer]\n])\n\nOperationSerializers.witness_update = OperationDataSerializer(11, [\n    ['owner', StringSerializer],\n    ['url', StringSerializer],\n    ['block_signing_key', PublicKeySerializer],\n    ['props', ChainPropertiesSerializer],\n    ['fee', AssetSerializer]\n])\n\nOperationSerializers.witness_set_properties = OperationDataSerializer(42, [\n    ['owner', StringSerializer],\n    ['props', FlatMapSerializer(StringSerializer, VariableBinarySerializer)],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.account_update2 = OperationDataSerializer(43, [\n    ['account', StringSerializer],\n    ['owner', OptionalSerializer(AuthoritySerializer)],\n    ['active', OptionalSerializer(AuthoritySerializer)],\n    ['posting', OptionalSerializer(AuthoritySerializer)],\n    ['memo_key', OptionalSerializer(PublicKeySerializer)],\n    ['json_metadata', StringSerializer],\n    ['posting_json_metadata', StringSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.create_proposal = OperationDataSerializer(44, [\n    ['creator', StringSerializer],\n    ['receiver', StringSerializer],\n    ['start_date', DateSerializer],\n    ['end_date', DateSerializer],\n    ['daily_pay', AssetSerializer],\n    ['subject', StringSerializer],\n    ['permlink', StringSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.update_proposal_votes = OperationDataSerializer(45, [\n    ['voter', StringSerializer],\n    ['proposal_ids', ArraySerializer(Int64Serializer)],\n    ['approve', BooleanSerializer],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nOperationSerializers.remove_proposal = OperationDataSerializer(46, [\n    ['proposal_owner', StringSerializer],\n    ['proposal_ids', ArraySerializer(Int64Serializer)],\n    ['extensions', ArraySerializer(VoidSerializer)]\n])\n\nconst OperationSerializer = (buffer: ByteBuffer, operation: Operation) => {\n    const serializer = OperationSerializers[operation[0]]\n    if (!serializer) {\n        throw new Error(`No serializer for operation: ${ operation[0] }`)\n    }\n    try {\n        serializer(buffer, operation[1])\n    } catch (error) {\n        error.message = `${ operation[0] }: ${ error.message }`\n        throw error\n    }\n}\n\nconst TransactionSerializer = ObjectSerializer([\n    ['ref_block_num', UInt16Serializer],\n    ['ref_block_prefix', UInt32Serializer],\n    ['expiration', DateSerializer],\n    ['operations', ArraySerializer(OperationSerializer)],\n    ['extensions', ArraySerializer(StringSerializer)]\n])\n\nexport const Types = {\n    Array: ArraySerializer,\n    Asset: AssetSerializer,\n    Authority: AuthoritySerializer,\n    Binary: BinarySerializer,\n    Boolean: BooleanSerializer,\n    Date: DateSerializer,\n    FlatMap: FlatMapSerializer,\n    Int16: Int16Serializer,\n    Int32: Int32Serializer,\n    Int64: Int64Serializer,\n    Int8: Int8Serializer,\n    Object: ObjectSerializer,\n    Operation: OperationSerializer,\n    Optional: OptionalSerializer,\n    Price: PriceSerializer,\n    PublicKey: PublicKeySerializer,\n    StaticVariant: StaticVariantSerializer,\n    String: StringSerializer,\n    Transaction: TransactionSerializer,\n    UInt16: UInt16Serializer,\n    UInt32: UInt32Serializer,\n    UInt64: UInt64Serializer,\n    UInt8: UInt8Serializer,\n    Void: VoidSerializer\n}\n"]}